Php 将平面数组转换为多维数组
想象一下有这样一个数组:Php 将平面数组转换为多维数组,php,arrays,recursion,multidimensional-array,dynamic-arrays,Php,Arrays,Recursion,Multidimensional Array,Dynamic Arrays,想象一下有这样一个数组: [ 'key1' => 'Label 1', 'key2' => 'Label 2', 'key3' => 'Label 3' ]; [ 'key1' => [ 'key1' => 'Label 1', 'key2' => [ 'key2' => 'Label 2', 'key3' => [ 'key3' => 'Label 3',
[
'key1' => 'Label 1',
'key2' => 'Label 2',
'key3' => 'Label 3'
];
[
'key1' => [
'key1' => 'Label 1',
'key2' => [
'key2' => 'Label 2',
'key3' => [
'key3' => 'Label 3',
],
],
],
];
如何将其转换为如下多维数组:
[
'key1' => 'Label 1',
'key2' => 'Label 2',
'key3' => 'Label 3'
];
[
'key1' => [
'key1' => 'Label 1',
'key2' => [
'key2' => 'Label 2',
'key3' => [
'key3' => 'Label 3',
],
],
],
];
我考虑过使用递归函数和数组移位,但我不确定如何编写它
数组的嵌套深度应与元素的嵌套深度相同。这里有一种使用循环的方法,将指针保持在输出数组中,这样我们就可以将值进一步推入其中:
$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
)
)
)
)
这里有一个递归解决方案,只是为了好玩:
function nest(array $flat): array
{
// base
if (!$flat) return [];
// recursive
return [key($flat) => array_merge(array_splice($flat, 0, 1), nest($flat))];
}
在输入为空的基本情况下,返回一个空数组
对于递归情况,返回一个键/值对
- 键=输入的第一个键,并且
- value=与嵌套其余元素的结果合并的第一个元素