在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
(我希望很清楚!)。我一直在尝试确定一种算法,该算法将生成一个嵌套数组或类似的输出,以暴露树层次结构,以便我可以使用它;例如,一个这样的输出将是:tree = ['1' => ['2' => ['4'], '3']]]
。该算法可以支持任意深度的数组;但我限制条件是孩子不能有一个以上的父母。
为非标准语法道歉,我希望它有效地传达了我想要实现的目标,我认为这是深度优先搜索 - 但是我遇到的实现对于我的理解来说太干了我很感激你的帮助。
答案 0 :(得分:1)
如果您使用密钥作为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);
看看你得到了什么。