PHP 平面数组嵌套 [“a”, “b”, “c”] 到 [“a” =>[“b”=>[“c”]]] [已关闭]
正如带有该示例的标题所说,我需要一个平面数组,由每个后续键作为前一个值嵌套。
例:
array("I", "need", "this", "to", "be", "nested");
// To:
array("I" => array("need" => array("this" => array("to" => array("be" => array("nested"))))))
正如带有该示例的标题所说,我需要一个平面数组,由每个后续键作为前一个值嵌套。
例:
array("I", "need", "this", "to", "be", "nested");
// To:
array("I" => array("need" => array("this" => array("to" => array("be" => array("nested"))))))
下面是一个可能的实现:
<?php
function make_nested($array) {
if (count($array) < 2)
return $array;
$key = array_shift($array);
return array($key => make_nested($array));
}
print_r(make_nested(array("I", "need", "this", "to", "be", "nested")));
如果你不喜欢递归,这里有一个迭代版本:
function make_nested($array) {
if (!$array)
return array();
$result = array(array_pop($array));
while ($array)
$result = array(array_pop($array) => $result);
return $result;
}
使用array_reduce:
$a = ["I", "need", "this", "to", "be", "nested"];
$result = array_reduce(array_reverse($a), function($prevArray, $key){
return $prevArray ? [$key => $prevArray] : [$key];
}, null);
请注意,我们使用array_reverse,因为没有左减量。