laravel 点阵转换为关联数组

tzdcorbm  于 2023-02-20  发布在  其他
关注(0)|答案(4)|浏览(146)

在laravel中,有没有什么函数可以把一个用点分割的string转换成associative array
例如:
user.profile.settings转换为['user' => ['profile' => 'settings']]
我找到了methodarray_dot,但它的工作方式相反。

bxgwgixi

bxgwgixi1#

不,默认情况下Laravel只提供array_dot()帮助器,您可以使用它将多维数组扁平化为点标记数组。

可能的解决办法

最简单的方法是使用this小软件包,在Laravel中添加array_undot()帮助器,然后就像软件包文档中说的那样,你可以这样做:

$dotNotationArray = ['products.desk.price' => 100, 
                     'products.desk.name' => 'Oak Desk',
                     'products.lamp.price' => 15,
                     'products.lamp.name' => 'Red Lamp'];

$expanded = array_undot($dotNotationArray)

/* print_r of $expanded:

[
    'products' => [
        'desk' => [
            'price' => 100,
            'name' => 'Oak Desk'
        ],
        'lamp' => [
            'price' => 15,
            'name' => 'Red Lamp'
        ]
    ]
]
*/

另一个可能的解决方案是使用以下代码创建一个helper函数:

function array_undot($dottedArray) {
  $array = array();
  foreach ($dottedArray as $key => $value) {
    array_set($array, $key, $value);
  }
  return $array;
}
pw136qt2

pw136qt22#

array_dot的逆运算并不完全符合您的要求,因为它仍然需要一个关联数组并返回一个关联数组,而您只有一个字符串。
我想你可以很容易地做这个。

function yourThing($string)
{
    $pieces = explode('.', $string);
    $value = array_pop($pieces);
    array_set($array, implode('.', $pieces), $value);
    return $array;
}

这里假设你传递的字符串至少有一个点(至少有一个键[在最后一个点之前]和一个值[在最后一个点之后]),你可以将其扩展为字符串数组,并轻松地添加适当的检查。

>>> yourThing('user.profile.settings')
=> [
     "user" => [
       "profile" => "settings",
     ],
   ]
yrdbyhpb

yrdbyhpb3#

Laravel没有提供这样的功能。

4zcjmb1e

4zcjmb1e4#

Laravel有一个数组取消点方法。

use Illuminate\Support\Arr;
 
$array = [
    'user.name' => 'Kevin Malone',
    'user.occupation' => 'Accountant',
];
 
$array = Arr::undot($array);
 
// ['user' => ['name' => 'Kevin Malone', 'occupation' => 'Accountant']]

参考:www.example.comhttps://laravel.com/docs/8.x/helpers#method-array-undot

相关问题