按键数组创建嵌套数组

时间:2016-01-19 20:07:58

标签: php arrays multidimensional-array

我在按键数组创建嵌套数组并为最后一个嵌套项指定值时遇到了一些困难。

例如,允许$value = 4;$keys = ['a', 'b', 'c'];

最终结果应为:

[
  'a' => [
    'b' => [
      'c' => 4
    ]
  ]
]

我尝试过递归,但没有成功。 任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:5)

你不需要递归,只需从右到左进行:

$a = $value;
for ($i = count($keys)-1; $i>=0; $i--) {
  $a = array($keys[$i] => $a);
}

或来自@felipsmartins的更短版本:

$a = $value;
foreach (array_reverse($keys) as $valueAsKey) $a = [$valueAsKey => $a]; 

答案 1 :(得分:1)

你可以试试。

$value = 4;
$keys = ['a', 'b', 'c'];
$a = $value;
$i=count($keys)-1;
foreach($keys as $key){
    $a = array($keys[$i] => $a);
    $i--;
}
print_r($a);

输出

Array
(
    [a] => Array
        (
            [b] => Array
                (
                    [c] => 4
                )

        )

)

答案 2 :(得分:0)

通过引用在结果数组中获取嵌套项的解决方案:

$value = 4;
$keys = ['a', 'b', 'c'];

$result = [];

$reference = &$result;
foreach($keys as $key) {
    if (!array_key_exists($key, $reference)) $reference[$key] = [];
    $reference = &$reference[$key];
}
$reference = $value;

print_r($result);