如何在 PHP 中将每个项目嵌套在一个数组中?

How can I nest each item in an array within each other in PHP?

如果我有以下数组:

[
  'foo',
  'bar',
  'baz' 
]

如何使用 PHP 动态获得此输出:

[
  'foo' => [
    'bar' => [
      'baz' => []
    ]
  ]
]

编辑

我最终通过向后构建数组并跟踪最后一个键来实现它,但我会对更简洁的递归方法感兴趣:

$arr = ['foo', 'bar', 'baz'];
$new_arr = [];
$last_key = null;

foreach ( array_reverse( $arr ) as $item ) {
    if ( $last_key ) {
        $new_arr[ $item ] = $new_arr;
        unset( $new_arr[ $last_key ] );
        $last_key = $item;
    } else {
        $new_arr[ $item ] = [];
        $last_key = $item; 
    }
}
$arr = [ 'foo', 'bar', 'baz' ];

$new_arr = array_reduce(array_reverse($arr), static fn($carry, $item) => [ $item => $carry ], []);

步骤:

  1. 反转数组。
  2. 减少反转数组。每次迭代 return [ $item => $carry ].

试试这个:

function buildNestedArray($arr) {
  if (!$arr) {
    return [];
  }
  return [ $arr[0] => buildNestedArray(array_slice($arr, 1))];
}

如果您想使用 foreach,则不必取消设置或使用 if/else。

您可以反转 $arr,并使用 $arr 的值作为键将每次迭代的 $new_arr(结果)包装在一个新数组中。

$arr = [
    'foo',
    'bar',
    'baz'
];

$new_arr = [];

foreach(array_reverse($arr) as $v) {
    $new_arr = [$v => $new_arr];
}

print_r($new_arr);

看到一个PHP demo

输出

Array
(
    [foo] => Array
        (
            [bar] => Array
                (
                    [baz] => Array
                        (
                        )

                )

        )

)