Реализовываю в одном приложении функцию просмотра отчета. Для сотрудников у которых нет подчиненных - можно посмотреть отчет только для себя, для тех у кого есть подчиненные - давать выбор посмотреть отчет по ним.
Сотрудники разбиты по отделам и у каждого отдела есть руководитель.
Пример отображения данных (в каком виде база их возвращает):
UF_HEAD - ID руководителя отдела
ID - ID отдела
PARENT - родитель отдела
[0] => Array
(
[ID] => 1
[NAME] => Рога и копыта
[UF_HEAD] => 40
)
[1] => Array
(
[ID] => 86
[NAME] => Рога
[PARENT] => 1
[UF_HEAD] => 88
)
[2] => Array
(
[ID] => 72
[NAME] => Копыта
[PARENT] => 1
[UF_HEAD] => 88
)
[3] => Array
(
[ID] => 55
[NAME] => Рожки
[PARENT] => 86
[UF_HEAD] => 70
)
Я преобразую его в многомерный древовидный массив
[1] => Array
(
[ID] => 1
[NAME] => Рога и копыта
[UF_HEAD] => 40
[CHILDS] =>
Array
(
[86] => Array
(
[ID] => 86
[NAME] => Рога
[PARENT] => 1
[UF_HEAD] => 88
[CHILDS] => Array
(
[55] => Array
(
[ID] => 55
[NAME] => Рожки
[PARENT] => 86
[UF_HEAD] => 70
)
)
)
[72] => Array
(
[ID] => 72
[NAME] => Копыта
[PARENT] => 1
[UF_HEAD] => 88
)
)
)
И вот тут начинается главная проблема, в которой не могу разобраться:
Мне нужно как-то в каждой ветке добавить поле [CHILDS_ID] в которой будет массив ID всех нижестоящих подразделений.
Или может я что-то не так делаю - основная мысль в том, что на входе я имею ID пользователя (в таблице UF_HEAD), и мне нужно собрать все ID дочерних подразделений, где UF_HEAD родительского раздела совпадает с ID пользователя.
Грубо говоря, чтобы пользователь с ID 40, мог смотреть отчеты по всем, а с ID=88 только по отделу с ID 86 и 55.