需要帮助
以下是要求详情
//Input Array
$folders = array('x','y','z',4,'s');
//Output array will be like this
$u = array(
'x'=>array(
y'=>array(
'z'=>array(
4=>'s'
)
)
)
);
上述要求的通用函数(最大数组长度:n)
答案 0 :(得分:2)
只需使用array_walk
和array_reverse
作为
array_walk(array_reverse($folders),function($v,$k)use(&$folders){
$folders = $k ? [$v => $folders] : $v;
});
或者
function nest_array($array){
if(count($array) < 2)
return $array;
$key = array_shift($array);
return array($key => nest_array($array));
}
print_r(nest_array($folders));
答案 1 :(得分:0)
您可以简单地执行反向循环,例如: -
$newArray = null;
$ar = array('x','y','z',4,'s');
$arLen = count($ar)-1;
for($i=$arLen; $i >= 0; $i--){
$newArray = is_null($newArray) ? $ar[$i] : [$ar[$i] => $newArray];
}
答案 2 :(得分:0)
我非常喜欢@ Narendra的答案,但我想我会发布一个递归解决方案作为另一种选择:
function recurse(&$tail)
{
$head = array_shift($tail);
return $tail ? [$head => recurse($tail)] : $head;
}
$folders = array('x','y','z',4,'s');
$u = recurse($folders);
print_r($u);
此版本不断弹出数组的第一个元素($head
),并在其余元素($tail
)上递归,直到没有元素为止(在这种情况下array_shift()
返回null
。
这会产生:
Array
(
[x] => Array
(
[y] => Array
(
[z] => Array
(
[4] => s
)
)
)
)
希望这会有所帮助:)