从键构建多维数组

时间:2014-07-16 15:57:17

标签: php arrays multidimensional-array

我似乎无法弄清楚这一点,我希望有人对此有一个神奇的递归解决方案。我有一个键列表,基本上我想将它转换为嵌套数组。

array('level1', 'level2', 'level3');

array(
    'level1' => array(
        'level2' => array(
             'level3' // last key in array should be just a value
        )
    )
)

非常感谢任何可以提供帮助的人!

2 个答案:

答案 0 :(得分:3)

这样的事情应该可以胜任:

function buildMultiDimensional(Array $arr)
{
    // the first value will become a new key
    $newKey = array_shift($arr);

    if (empty($arr)) {
        // this is where the recursion stops
        return $newKey;
    }

    // and the recursion !!!
    return array($newKey => buildMultiDimensional($arr));
}

$arr = array('level1', 'level2', 'level3', 'level4', 'level5');
var_dump(buildMultiDimensional($arr));

结果是预期的结果:

array(1) {
    ["level1"]=>
  array(1) {
        ["level2"]=>
    array(1) {
            ["level3"]=>
      array(1) {
                ["level4"]=>
        string(6) "level5"
      }
    }
  }
}

答案 1 :(得分:2)

你不需要递归。参考文献可以使用单个循环。

<?php
//array to iterate
$array = array('level1', 'level2', 'level3');

//contains our entire array
$out = array();

//temp variable to store references as we go down.
$tmp = &$out;

//get the last value off the array
$last = array_pop($array);

//loop over the array
foreach($array as $level){
    //make an array under the current level
    $tmp[$level] = array();
    //assign tmp to the new level
    $tmp = &$tmp[$level];
}
//assign the last key as the value under the last key
$tmp = $last;

//display output
print_r($out);

示例:http://codepad.viper-7.com/zATfyo

没有参考,反向工作:

<?php
//array to iterate
$array = array('level1', 'level2', 'level3');

//get the last value off the array
$out = array_pop($array);

//flip the array backwards
$array = array_reverse($array);

//loop over the array
foreach($array as $level){
    $out = array($level=>$out);
}

//display output
print_r($out);

示例:http://codepad.viper-7.com/fgxeHO