为组织结构图遍历未知级别的用户

Traversing an Unknown Level of Users for an Organizational Chart

我正在 PHP 制作组织结构图,数据是从数据库中检索的。

组织结构图的示例如下所示,但级别数未知:

  1. 布兰登

  2. 大卫

    一个。阿曼达

    b。米歇尔

    c。迈克尔

  3. 罗伯特

    一个。克里斯汀

    • 查尔斯

    • 阿什莉

遍历类算法一直是我的弱项,需要你的帮助。我已经试验了 "traverse" 函数的许多变体,这些变体会调用自身,但我还没有找到合适的解决方案。

我现在的临时解决方案只有三层深度,你可以看出为什么它不现实。

foreach($user->getChildren() as $child) {
    echo $child->name;

    foreach($child->getChildren() as $ch) {
        echo $ch->name;

        foreach($ch->getChildren() as $c) {
            echo $c->name;
            // ... more foreach statements
        }
    }
}

$user 属于 class User,并且 $user->getChildren() 包含以 $user 作为其父级

的用户对象数组

您的遍历函数可能类似于:

function traverse($users)
{
    if(empty($users)) return;

    foreach($users as $user)
    {
        echo $user->name;
        traverse($user->getChildren());
    }
}

所以你有可以是 if(empty($users)) return;if(count($users) == 0) return; 的停止条件,你明白了,每个级别的 foreach 循环,打印用户的名字, 并为用户的 children.

再次调用该函数

您可以将其称为 traverse([$user]);,其中 $user 是您要开始的用户。