#php #tree
#php #дерево
Вопрос:
В моей базе данных есть древовидная структура, например, для сотрудников.
create table "employees" (employee_id, name, manager_id);
где, конечно, manager_id — это employee_id (та же таблица) с менеджером этого сотрудника.
Это может быть легко преобразовано в массив, представляющий древовидную структуру компании (хотя наверху нет 1 генерального директора, корневой узел имеет несколько элементов). Пока все в порядке.
Теперь, для обработки регистраций, у меня есть массив employee_ids
$registrations = array(3,7, 10);
Мне нужно было бы показать их в древовидной структуре, где отображаются только менеджеры этих сотрудников (но до вершины дерева). У кого-нибудь есть алгоритм для этого? Мне удалось добавить их в дерево, но не удалось объединить разные ветви вместе, когда 2 человека используют 1 менеджера.
Скажем, у сотрудников 3 и 10 (cfr выше) один и тот же менеджер с идентификатором 15, а у сотрудника 7 есть менеджер с идентификатором 23, где оба менеджера отчитываются перед одним и тем же менеджером с идентификатором 33, который, в свою очередь, отчитывается перед 45: мне нужен массив
array('45'=>array('33'=>array('23'=>array(7), '15'=>array(3,10))));
Мне удается построить эту структуру, например, начиная с employee 3, я получаю
array('45'=>array('33'=>array('15'=>array(3))));
и во время цикла для employee 7 мне удается создать ветку
array(23->array(7))
но как я могу теперь объединить этот новый массив в уже существующий… ? Я знаю, что менеджер 23 равен 33, но как мне а) найти, что его нужно добавить в дерево, и б) добавить его в дерево в правильном месте??? кто-нибудь?
Ответ №1:
Мое мнение таково, что вы выбрали неправильный способ хранения данных дерева в вашей базе данных.
Если вы хотите сохранить данные дерева в своей базе данных, вы должны использовать модифицированный обход дерева предварительного заказа.
Более подробную информацию об этом способе хранения деревьев в базе данных вы можете найти здесь:http://www.sitepoint.com/hierarchical-data-database /
С помощью этого алгоритма вы можете управлять своими данными в любом порядке, который вам нравится, и вы можете легко извлекать любую информацию, которая вам нравится!
Комментарии:
1. Могу ли я узнать причину голосования «Против»?
2. Мерианос Никос: интересная ссылка, спасибо. Хотя, с первого прочтения этой статьи, мне все еще неясно, как мне нужно было бы решить проблему с «Измененной схемой обхода дерева предварительного заказа» базы данных. Проблема по-прежнему сохраняется: как узнать, где в дереве должна быть размещена вторая ветвь?