在laravel中,有没有什么函数可以把一个用点分割的string转换成associative array?例如:user.profile.settings转换为['user' => ['profile' => 'settings']]?我找到了methodarray_dot,但它的工作方式相反。
string
associative array
user.profile.settings
['user' => ['profile' => 'settings']]
method
array_dot
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; }
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", ], ]
yrdbyhpb3#
Laravel没有提供这样的功能。
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
4条答案
按热度按时间bxgwgixi1#
不,默认情况下Laravel只提供array_dot()帮助器,您可以使用它将多维数组扁平化为点标记数组。
可能的解决办法
最简单的方法是使用this小软件包,在Laravel中添加array_undot()帮助器,然后就像软件包文档中说的那样,你可以这样做:
另一个可能的解决方案是使用以下代码创建一个helper函数:
pw136qt22#
array_dot
的逆运算并不完全符合您的要求,因为它仍然需要一个关联数组并返回一个关联数组,而您只有一个字符串。我想你可以很容易地做这个。
这里假设你传递的字符串至少有一个点(至少有一个键[在最后一个点之前]和一个值[在最后一个点之后]),你可以将其扩展为字符串数组,并轻松地添加适当的检查。
yrdbyhpb3#
Laravel没有提供这样的功能。
4zcjmb1e4#
Laravel有一个数组取消点方法。
参考:www.example.comhttps://laravel.com/docs/8.x/helpers#method-array-undot