Обход неизвестного уровня пользователей для организационной диаграммы

Я работаю над организационной диаграммой в PHP, и данные извлекаются из базы данных.

Пример организационной структуры выглядит следующим образом, но имеет неизвестное количество уровней:

мне

  1. Brandon

  2. Дэвид

    а. Аманда

    б. Мишель

    с. Майкл

  3. Роберт

    а. Кристен

    • Чарльз

    • Ashley

Алгоритмы обходного типа часто были моей слабостью, и мне нужна ваша помощь. Я экспериментировал со многими вариантами «обходной» функции, которая вызывала бы себя, но я просто еще не пришел к правильному решению.

Временное решение, которое у меня есть сейчас, имеет глубину всего три уровня, и вы можете понять, почему оно нереально.

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 как их родитель

0

Решение

Ваша функция перемещения может выглядеть примерно так:

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 пользователь, с которого вы хотите начать.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]