我有一个看起来像这样的数组
array(
1 => array(
'id' => 1,
'name' => 'first',
'parent' => null
),
2 => array(
'id' => 2,
'name' => 'second',
'parent' => null
),
3 => array(
'id' => 3,
'name' => 'third',
'parent' => 1
),
4 => array(
'id' => 4,
'name' => 'fourth',
'parent' => 3
),
5 => array(
'id' => 5,
'name' => 'fifth',
'parent' => 1
),
);
但我想将任何“子”项移动到数组下的“子”键。所以,我想结束
array(
1 => array(
'id' => 1,
'name' => 'first',
'parent' => null,
'children' => array(
3 => array(
'id' => 3,
'name' => 'third',
'parent' => 1,
'children' => array(
4 => array(
'id' => 4,
'name' => 'fourth',
'parent' => 3,
'children' => array()
),
)
),
5 => array(
'id' => 5,
'name' => 'fifth',
'parent' => 1,
'children' => array()
)
)
),
2 => array(
'id' => 2,
'name' => 'second',
'parent' => null,
'children' => array()
)
);
但老实说,我完全不知道从哪里开始。
我在想也许循环遍历数组中的每个项目,然后随着我一起构建新数组$new_array[$current['parent']]['children'][$current['id']] = $current;
但是,一旦我遇到嵌套项目,我就会遇到问题。
我可以构建一个函数,该函数采用当前数组和整个数组并递归地向上移动树以找到所有父级,从而找到整个路径,但如果其中一个父级尚未创建,我会再次遇到问题。
我能想到的唯一选择是构建一个不同级别的父母的数组映射并递归地循环并以这种方式获取所有元素,但这似乎有点低效?
任何人都可以提出解决方案吗?