|
|
|
| Приветствую уважаемые коллеги.
Возникла непонятная ситуация, никак не пойму в чём дело...
Есть таблица в БД со страницами. Каждая страница может быть родителем другой, соответственно:
page_id | page_name | page_parent_id
==================================
1| Раздел 1 | 0
2| Раздел 2 | 0
3| Подразд 1 | 1 // первый уровень вложенности
4| Подразд 2 | 1
5| Подразд 1-1 | 3 // второй уровень вложенности
6| Подразд1-1-1| 5 // третий уровень вложенности
Да, да знаю - деревья, рекурсия - тут всё понятно. НО... вытаскиваю я все страницы из БД, дабы сформировать меню разделов, формирую массив определённого вида и в нём мне нужно установить самого первого прародителя, чтоб в определённой ветке отображать только соответствующее меню. Т.е. в ветке прародителя "Раздел 1" у меня должно быть нечто вроде:
Раздел 1 (заголовок)
+----------------+
Подразд 1 (Link)
Подразд 2 (Link)
Подразд 1 (заголовок)
+----------------+
Подразд 1-1 (Link)
Подразд 1-1 (заголовок)
+----------------+
Подразд1-1-1 (Link)
Это условно.
В общем всё работает, единственная проблема с определением id прародителя.
Написал рекурсивную функцию для определения id прародителя:
Функция принимает ссылку на массив со всей выборкой из БД и значение прямого родителя для данной страницы.
function get_parent(&$res_arr, $page_parent_id)
{
for($c = 0; $c < count($res_arr); $c++)
{
if($res_arr[$c]['page_id'] == $page_parent_id) // проверяем строку прямого родителя
{
if ($res_arr[$c]['parent_id'] == 0) // true если достигли верха иерархии
{
return $res_arr[$c]['page_id'];
}
else // значит ищем прямого родителя данного раздела и проверяем его уровень
{
get_parent($res_arr, $res_arr[$c]['parent_id']);
}
}
}
}
|
Почему-то она находит прародителя (parent_id =0) только если он через уровень от проверяемой строки, т.е. для второго уровня вложенности, а для третьего уже не находит. (уровни вложенность в примере таблицы выше)
Никак не пойму в чём дело? Помогите, пожалуйста. | |
|
|
|
|
|
|
|
для: Enso
(05.06.2012 в 00:41)
| | Приветствую коллеги.
Хоть бы ради приличия кто-нибудь взглянул. Тут просто пример подробно расписан, но в суть вопроса то вникнуть минуту займёт. Благодарю. | |
|
|
|