将点数组转换为关联数组

时间:2018-07-30 09:08:01

标签: arrays string laravel laravel-5.5

在laravel中,有什么函数可以将点分隔的string转换成associative array

例如:

user.profile.settings变成['user' => ['profile' => 'settings']]吗?

我找到了method array_dot,但是效果相反。

3 个答案:

答案 0 :(得分:2)

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",
     ],
   ]

答案 1 :(得分:1)

Laravel没有提供这样的功能。

答案 2 :(得分:1)

否,默认情况下,Laravel仅提供array_dot()助手,您可以使用该助手将多维数组平整为点符号数组。

可能的解决方案

最简单的方法是使用this小程序包,该程序包将array_undot()帮助程序添加到Laravel中,然后像程序包中所说的那样,您可以执行以下操作:

{
    path: '',
    redirectTo: 'project', //here you mentioned if path empty go to project
    pathMatch: 'full',
},

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

$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'
        ]
    ]
]
*/