首页 > 解决方案 > 将平面数组转换为多维数组

问题描述

想象一下有一个这样的数组:

[
  'key1' => 'Label 1',
  'key2' => 'Label 2',
  'key3' => 'Label 3'
];

如何将其转换为这样的多维数组:

[
  'key1' => [
    'key1' => 'Label 1',
    'key2' => [
      'key2' => 'Label 2',
      'key3' => [
        'key3' => 'Label 3',
      ],
    ],
  ],
];

我想到了一些带有递归函数和 array_shift 的东西,但我不确定如何编写它。

数组的嵌套深度应与元素的数量一样深。

标签: phparraysrecursionmultidimensional-arraydynamic-arrays

解决方案


这是一种使用循环的方法,维护一个指向输出数组的指针,因此我们可以简单地将值进一步推入其中:

$result = array();
$r = &$result;
foreach ($arr as $k => $v) {
    $r[$k] = array($k => $v);
    $r = &$r[$k];
}
print_r($result);

输出:

Array
(
    [key1] => Array
        (
            [key1] => Label 1
            [key2] => Array
                (
                    [key2] => Label 2
                    [key3] => Array
                        (
                            [key3] => Label 3
                        )
                )
        )
)

3v4l.org 上的演示


推荐阅读