在PHP中从数组创建子数组

时间:2015-08-10 12:38:00

标签: php

需要帮助

以下是要求详情

//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)

3 个答案:

答案 0 :(得分:2)

只需使用array_walkarray_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];
}

工作示例:https://eval.in/414821

答案 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
                        )
                )
        )
)

希望这会有所帮助:)