我似乎无法弄清楚这一点,我希望有人对此有一个神奇的递归解决方案。我有一个键列表,基本上我想将它转换为嵌套数组。
array('level1', 'level2', 'level3');
要
array(
'level1' => array(
'level2' => array(
'level3' // last key in array should be just a value
)
)
)
非常感谢任何可以提供帮助的人!
答案 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);