![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| mark2011 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 28.6.2011 Репутация: 2 Всего: 2 |
Доброе утро!
Создавал тему в "Профи", её перенесли сюда... поэтому здесь и спрошу... Речь идёт про списки смежности. Удаляю ветку из дерева. Но при этом нужно учитывать, что у неё может быть неограниченное количество подуровней, которые, по идее, нужно тоже удалить. Сейчас у меня так: удаляется ветка и её прямые потомки. Если у потомков есть ещё потомки, то они становятся корнями дерева, что не очень-то логично и корректно. Понимаю, что здесь требуется рекурсия, но пока не пойму, каким образом. Если кто может, подскажите, или дайте ссылку, где можно внятно прочитать про это. P . S . Вообще пишу свою библиотеку, потому что в инете есть какие-то отрывки, но чёткого класса для работы с деревом нет. Я, по крайней мере, не нашёл. Со вложенными множествами то же самое - dbtree, класс с 2005 года и, похоже, уже не поддерживается. Нужно что-то новое и оптимизированное. |
|||
|
||||
| mark2011 |
|
||||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 28.6.2011 Репутация: 2 Всего: 2 |
Вот что-то нашёл в инете, начал так, но по-моему очень сложно, есть путь проще, наверняка
Возвращаем всех потомков родителя
Приводим это всё к нормальному виду:
Загружаем родителя:
В результате получаем структуру:
Пытаемся выявить всех потомков на неограниченном уровне вложенности
Как-то не срабатывает и ошибки не выдаёт... |
||||||||||
|
|||||||||||
| mark2011 |
|
||||||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 174 Регистрация: 28.6.2011 Репутация: 2 Всего: 2 |
Вот такой вариант (мой, самописный):
При выполнении кода:
Выдаёт следующее:
Строка 22:
Вроде рекурсия правильная (не зацикливается) но почему перерасход памяти?? Добавлено через 3 минуты и 57 секунд Изменил строку 22 вот на это:
В ответ получил:
Гораздо лучше! Но всё-таки ещё не то... Это сообщение отредактировал(а) mark2011 - 4.8.2011, 10:27 |
||||||||||||
|
|||||||||||||
| Photon |
|
|||
|
Злобный программер ![]() ![]() Профиль Группа: Участник Сообщений: 282 Регистрация: 27.2.2009 Где: Таганрог Репутация: 10 Всего: 12 |
Есть такая отличная вещь, как Nested Sets
Там, правда, есть некоторые проблемки при добавлении и удалении узла или ветви. Довольно трудоёмкая операция.. Зато получение любых ветвей - одно удовольствие -------------------- With best regards.. |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |