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


Specific algorithm to recurse through a tree structure in PHP

在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);

看看你得到了什么。