дерево php снизу вверх

#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. Мерианос Никос: интересная ссылка, спасибо. Хотя, с первого прочтения этой статьи, мне все еще неясно, как мне нужно было бы решить проблему с «Измененной схемой обхода дерева предварительного заказа» базы данных. Проблема по-прежнему сохраняется: как узнать, где в дереве должна быть размещена вторая ветвь?