在PHP中,我有一个这样的结构:
Array
(
[0] = Array
(
'id' => 1,
'parent' => 0
)
[1] = Array
(
'id' => 2,
'parent' => 1
)
[2] = Array
(
'id' => 3,
'parent' => 1
)
[3] = Array
(
'id' => 4,
'parent' => 2
)
)
id
是唯一的整数,而parent
是对另一个元素的id
的引用。如果parent
为0,则它没有父级。树状结构如下:
1 -> 2 -> 4
-> 3
(我希望这是清楚的!)。我一直在尝试确定一种算法,该算法将生成一个嵌套数组或类似的输出,以公开树层次结构,这样我就可以使用它;例如一个这样的输出将是:CCD_ 5。该算法可以支持任意深度的阵列;但我限制它的条件是一个孩子不能有一个以上的父母。
对不标准的语法表示歉意,我希望它能有效地传达我试图实现的目标,我认为这是一种深度优先的搜索——然而,我遇到的实现太枯燥了,我无法理解,所以我很感激在这方面的一些帮助。
如果您使用密钥作为id,您会发现这会非常容易。
$tree = array(
1 => array( 'parent' => 0 ),
2 => array( 'parent' => 1 ),
3 => array( 'parent' => 1 ),
4 => array( 'parent' => 2 ) );
现在,您可以循环遍历所有元素,只需将它们附加到其父元素即可。
$newtree = array();
foreach($tree as $leaf) {
if (!isset($newtree[$leaf['parent']])) $newtree[$leaf['parent']]=array();
$newtree[$leaf['parent']][]=$leaf; }
print_r($newtree);
看看你得到了什么。