我有一个问题,我有以下代码:
$s = 'a/b/c';
$array = array_reverse(explode('/', $s));
$result = [];
foreach($array as $key) {
$result = [$key => $result];
}
Print_r($result);
从行中获得通常的一维数组,然后需要从该数组中递归创建一个多维数组,并使用其元素作为键
我的代码可以循环使用,问题是,我可以不用循环来解决类似的问题吗?
谢谢!
答案 0 :(得分:1)
这是一种递归的方式:
function nest($keys) {
return count($keys) ? [$keys[0] => nest(array_slice($keys, 1))] : [];
}
$array = nest(explode('/', 'a/b/c')); // example
array_slice
将获取不包含第一个元素的数组副本。可以通过在数组中传递 offset 来避免这种复制开销:
function nest($keys, $start = 0) {
return $start < count($keys) ? [$keys[0] => nest($keys, $start+1)] : [];
}
$array = nest(explode('/', 'a/b/c')); // example
或者,更接近您的是,使用array_reduce
:
$array = array_reduce(array_reverse(explode('/', $s)), function ($acc, $key) {
return [$key => $acc];
}, []);
可惜的是,PHP没有提供JavaScript中提供的array_reduce_right
函数,因为这样可以使我们不必首先反转数组。