Php 按键数组创建嵌套数组

Php 按键数组创建嵌套数组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我在按键数组创建嵌套数组和为最后一个嵌套项赋值时遇到了一些困难 例如,let$value=4和$keys=['a','b','c'] 最终结果应该是: [ 'a' => [ 'b' => [ 'c' => 4 ] ] ] 我尝试过递归,但没有成功。 非常感谢您的帮助。您不需要递归,只需从右向左执行即可: $a = $value; for ($i = count($keys)-1; $i>=0; $i--) { $a = array

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

例如,let
$value=4
$keys=['a','b','c']

最终结果应该是:

[
  'a' => [
    'b' => [
      'c' => 4
    ]
  ]
]
我尝试过递归,但没有成功。
非常感谢您的帮助。

您不需要递归,只需从右向左执行即可:

$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]; 
你可以试试

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

        )

)

通过引用获取结果数组中的嵌套项来解决此问题:

$value=4;
$keys=['a','b','c'];
$result=[];
$reference=&$result;
foreach($key作为$key){
如果(!array_key_存在($key,$reference))$reference[$key]=[];
$reference=&$reference[$key];
}
$reference=$value;
打印(结果);

这太简单了。。。谢谢@gavriel这个输出数组([b]=>Array([c]=>4))非常好!但它可能更“容易抓住”像这样:@Abracadver,你提到的另一个问题是重复的,正是这个问题的补充。在这里,他问如何从不同的输入格式创建嵌套数组,在这里,嵌套数组作为输入提供。Dupe已被编辑。请在回答中添加解释。