Столкнулся с вопросом, имею древовидное меню вида:
ID NAME PARENT
Меню неизвестной вложенности, мне необходимо при известном ID элемента выбрать все его подчиненные элементы и подчиненные элементы этих элементов и т.д. то есть полностью ветку получается.
Возможно как то сделать это попроще или строить рекурсивную функцию?
на выходе мне необходимо получить массив из ID всех элементов ветки
Благодарю за ответы
1. 3d_killer - 06 Февраля, 2014 - 07:50:45 - перейти к сообщению
2. Мелкий - 06 Февраля, 2014 - 08:28:16 - перейти к сообщению
Только рекурсия. Выбор определённой ветви - это слабая сторона такого хранения дерева.
3. EuGen - 06 Февраля, 2014 - 09:32:41 - перейти к сообщению
Если речь об архитектуре - рекомендую посмотреть в сторону nested sets - а ещё лучше - closure table
4. Мелкий - 06 Февраля, 2014 - 09:38:58 - перейти к сообщению
EuGen пишет:
closure table
Как-то я пропустил эту структуру, спасибо. Нашёл такое объяснение что к чему: http://habrahabr[dot]ru/post/193166/
5. 3d_killer - 06 Февраля, 2014 - 09:56:29 - перейти к сообщению
написал рекурсию но что то не так не могли бы глянуть 2 уровень не набивает
PHP:
скопировать код в буфер обмена
скопировать код в буфер обмена
- $category=all_id_category(0,0);
- //Функция получения категорий
- function all_id_category($id,$index)
- {
- if($id!==0){$category[$index]=$id; $index++;}
- global $DBH;
- $id_category = $DBH->prepare("SELECT id,name FROM table_catalog WHERE parent=:parent");
- $id_category->bindParam(':parent',$id);
- $id_category->execute();
- while($res=$id_category->fetch())
- {
- $category[$index]=$res['name'];
- $index++;
- all_id_category($res['id'],$index);
- }
- return $category;
- }
(Добавление)
забыл сложить массив одномерный: