将平面数组转换为多维数组

想象一下,像这样的数组:

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

如何将其转换为多维数组,如下所示:

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

我考虑过使用递归函数和array_shift的东西,但是我不确定如何编写。

该数组应嵌套到与元素一样深的位置。

kimle 回答:将平面数组转换为多维数组

这是一种使用循环的方法,将指针保持在输出数组中,以便我们可以将值进一步推入其中:

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

Demo on 3v4l.org

,

这是一个有趣的递归解决方案:

function nest(array $flat): array
{
   // base
   if (!$flat) return [];

   // recursive
   return [key($flat) => array_merge(array_splice($flat,1),nest($flat))];
}

在基本情况下,当输入为空时,您将返回一个空数组。

对于递归情况,您返回键/值对

  • key =输入的第一个键,
  • value =第一个元素与其余元素嵌套在一起的结果
本文链接:https://www.f2er.com/3025470.html

大家都在问