在PHP中通过树结构递归的特定算法

时间:2012-03-12 22:31:51

标签: php algorithm recursion tree

在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']]]。该算法可以支持任意深度的数组;但我限制条件是孩子不能有一个以上的父母。

为非标准语法道歉,我希望它有效地传达了我想要实现的目标,我认为这是深度优先搜索 - 但是我遇到的实现对于我的理解来说太干了我很感激你的帮助。

1 个答案:

答案 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);

看看你得到了什么。