为组织结构图遍历未知级别的用户
Traversing an Unknown Level of Users for an Organizational Chart
我正在 PHP 制作组织结构图,数据是从数据库中检索的。
组织结构图的示例如下所示,但级别数未知:
我
布兰登
大卫
一个。阿曼达
b。米歇尔
c。迈克尔
罗伯特
一个。克里斯汀
查尔斯
阿什莉
遍历类算法一直是我的弱项,需要你的帮助。我已经试验了 "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
是您要开始的用户。
我正在 PHP 制作组织结构图,数据是从数据库中检索的。
组织结构图的示例如下所示,但级别数未知:
我
布兰登
大卫
一个。阿曼达
b。米歇尔
c。迈克尔
罗伯特
一个。克里斯汀
查尔斯
阿什莉
遍历类算法一直是我的弱项,需要你的帮助。我已经试验了 "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
是您要开始的用户。