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

时间:2017-09-16 16:07:24

标签: php algorithm traversal

我在PHP中使用组织结构图,并从数据库中检索数据。

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

  1. 布兰登

  2. 大卫

    一个。阿曼达

    湾米歇尔

    ℃。迈克尔

  3. 罗伯特

    一个。克里斯汀

    • 查尔斯

    • 阿什利

  4. 遍历式算法经常是我的弱点,我需要你的帮助。我已经尝试了很多变种" 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为父级

    的用户对象数组

1 个答案:

答案 0 :(得分:2)

您的遍历功能可能类似于:

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循环,它会打印用户名,以及再次为用户的孩子调用该功能。

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