【发布时间】:2012-08-16 10:48:49
【问题描述】:
我有一个看起来像这样的数组
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; 时构建新数组
但我一碰到嵌套项目就会遇到问题。
我可以构建一个函数,该函数采用当前数组和整个数组并递归地向上移动树以找到所有父级并因此找到整个路径,但如果其中一个父级尚未创建,我会再次遇到问题还没有。
我能想到的唯一选择是构建一个包含不同级别父级的数组映射,然后递归地循环遍历它并以这种方式获取所有元素,但这似乎效率不高?
谁能提出解决方案?
【问题讨论】:
-
我一直在努力解决这个问题...... 一个问题:Elem 4 是否有可能在初始数组中出现在 Elem 3 之后? (我想知道的是是否有可能必须在其父节点之前创建子节点) - 是的,当涉及树时,递归是我想到的第一件事......但是我们必须小心...细节... ;-)(我还没有做对)
-
@Dr.Kameleon 我相信我的解决方案在这种情况下可以满足 OP 的要求。不过,它只适用于 PHP 5 以后的版本,因为据我所知,引用在 4 中并不完全存在。
标签: php arrays recursion multidimensional-array