如何在 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 ], []);
步骤:
- 反转数组。
- 减少反转数组。每次迭代 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
(
)
)
)
)
如果我有以下数组:
[
'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 ], []);
步骤:
- 反转数组。
- 减少反转数组。每次迭代 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
(
)
)
)
)