想象一下,像这样的数组:
[
'key1' => 'Label 1',
'key2' => 'Label 2',
'key3' => 'Label 3'
];
如何将其转换为多维数组,如下所示:
[
'key1' => [
'key1' => 'Label 1',
'key2' => [
'key2' => 'Label 2',
'key3' => [
'key3' => 'Label 3',
],
],
],
];
我考虑过使用递归函数和array_shift的东西,但是我不确定如何编写。
该数组应嵌套到与元素一样深的位置。
答案 0 :(得分:2)
这是一种使用循环的方法,将指针保持在输出数组中,以便我们可以将值进一步推入其中:
$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
)
)
)
)
答案 1 :(得分:0)
这是一个有趣的递归解决方案:
function nest(array $flat): array
{
// base
if (!$flat) return [];
// recursive
return [key($flat) => array_merge(array_splice($flat, 0, 1), nest($flat))];
}
在基本情况下,当输入为空时,您将返回一个空数组。
对于递归情况,您返回键/值对