【问题标题】:Create nested array by array of keys通过键数组创建嵌套数组
【发布时间】:2016-04-25 11:17:29
【问题描述】:

我在通过键数组创建嵌套数组并为最后一个嵌套项分配值时遇到了一些困难。

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

最终结果应该是:

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

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

【问题讨论】:

  • @AbraCadaver,您提到的另一个重复的问题是这个问题的确切补充。在这里,他询问如何从不同的输入格式创建嵌套数组,嵌套数组作为输入给出。
  • 复制已被编辑。

标签: php arrays multidimensional-array


【解决方案1】:

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

$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]; 

【讨论】:

  • 这太容易了...谢谢@Gavriel
  • 这个输出数组 ([b] => Array ([c] => 4))
  • 相当不错!但它可能会更“容易捕捉”,如下所示:gist snippet
【解决方案2】:

你可以试试。

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

        )

)

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-19
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      • 2021-11-28
      • 1970-01-01
      相关资源
      最近更新 更多