在laravel中,有什么函数可以将点分隔的string
转换成associative array
?
例如:
user.profile.settings
变成['user' => ['profile' => 'settings']]
吗?
我找到了method
array_dot
,但是效果相反。
答案 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'
]
]
]
*/