PHP 平面数组嵌套 [“a”, “b”, “c”] 到 [“a” =>[“b”=>[“c”]]] [已关闭]

2022-08-30 18:13:06

正如带有该示例的标题所说,我需要一个平面数组,由每个后续键作为前一个值嵌套。

例:

array("I", "need", "this", "to", "be", "nested");
// To:
array("I" => array("need" => array("this" => array("to" => array("be" => array("nested"))))))

答案 1

下面是一个可能的实现:

<?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;
}

答案 2

使用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,因为没有左减量。

工作实例:http://ideone.com/N61VtE