Построение дерева иерархии с помощью PHP / MySQL
Рассмотрим пример построения дерева иерархии (в развернутом виде) на основе информации из базы данных с помощью PHP и MySQL. Ключ к решению данной задачи — использование рекурсивной функции. Иерархия разделов будет храниться в таблице базы данных MySQL.
Ниже на скриншоте показана данная таблица (catalogue):
- id — первичный ключ таблицы
- pid — id родительского раздела
Далее напишем следующий PHP-скрипт:
1. Файл dbopen.php (открывает соединение с MySQL)
if (!mysql_select_db($databaseName, $link)) < printf("Ошибка базы данных !"); exit(); >?>
2. Файл index.php (основной скрипт)
Всю работу выполняет рекурсивная функция ShowTree(). Ниже на скриншоте показан пример работы index.php:
Оставить комментарий
Комментарии
16 сентября 2015 года
0 / / 16.09.2015
16 сентября 2015, 17:30:35
да уж писаки.. а никто не догадался одним запросом получить данные в массив, а за тем с этим массивом и работать?
28 декабря 2009 года
0 / / 28.12.2009
28 декабря 2009, 16:48:14
так как у меня структура предполагается быть очень большой порядка 300 элементов, процесс запроса к базе данных только при авторизации, дальше все из сессии =)
а запросы будут очень частыми именно старницы с деревом =( поэтому исключаем все запросы к мускулю и делаем все граматна =)
о структуре и операциях до выведения:
изначально структура была представлена матрицей смежности для ориентированного графа, если граф двудольный будет бесконечный цикл, поэтому не стоит применять, потому как необходимо еще одно условия прерывания цикла, но это мне не нада поэтому, я не делал
потом поиском в ширину от необходимого элемента до всех остальных веток получили список смежности в структуре которого массив из 3х элементов: i — текущая вершина,j — родительская вершина,mark — уровень с 0
function show_tree($ParentID, $lvl = -1)
// text глабальная переменная содержимого на вывод
//главный цикл \/количество элементов в стеке (можно воскользоваться стандартной функцией count(array) )
for( $i = 1; $i < $info->hierar_queue[count]; $i++ )
// если уровень в списке совпадает с анализируемым в функции и родительский элемент соотвествует текущему
if($info->hierar_queue[$i][mark] == $lvl and $ParentID == $info->hierar_queue[$i][j])
// рукурсируем функцию с родительским — текущий и тот же уровень
// в начале функции он поднимется =)
// долго я ее дебагил чтобы эту строку чтобы написать
// возвращаем предыдущий элемент по выходу из функции
//уменьшаем уровень на выходе из функции
Что такое дерево решений и как его создать?
Нужно тщательно взвесить сложное решение? Попробуйте воспользоваться программой для создания деревьев решений. Читайте, как они устроены, где и как используются, как их создавать, и другую полезную информацию.
Читается за 8 мин.
Хотите создать собственную диаграмму? Попробуйте Lucidchart. Это быстро, легко и совершенно бесплатно.
Что такое дерево решений?
Дерево решений — разновидность схемы, где показаны возможные последствия принятия серии связанных между собой решений. Такой подход позволяет отдельным лицам и целым организациям взвесить разные варианты действий, принимая во внимание вовлеченные затраты, преимущества и уровни вероятности. Деревья решений применяются как в неформальных дискуссиях, так и в разработке алгоритмов для прогнозирования оптимального варианта действий математическим способом.
Дерево решений, как правило, начинается с одного узла, от которого ответвляются возможные варианты. Каждый из них затем ведет к дополнительным узлам, которые разветвляются на новые варианты. В итоге, вся схема приобретает форму дерева.
Узлы дерева решений символизируют одно из трех — вероятность, решение или конечный результат. Узел вероятности изображается в виде круга и сопровождается пометками с вероятностью того или иного результата. Узел решения отображается в виде квадрата и символизирует решение, которое необходимо принять. Ну а конечный узел указывает финальный результат, к которому ведет ветвь решений.
Деревья решений также можно составлять из символов для блок-схем, которые иногда удобнее воспринимать и усваивать.
Символы дерева решений
| Фигура | Название | Значение |
|---|---|---|
| Узел решения | Решение, которое необходимо принять | |
| Узел вероятности | Указывает несколько возможных результатов | |
| Ветви альтернативы | Каждая ветвь символизирует возможный результат или действие | |
| Отклоненная альтернатива | Вариант, который не был выбран | |
| Конечный узел | Символизирует конечный результат |
Как составить дерево решений
Прежде всего, определитесь, как вы планируете создавать дерево решений. Вы можете нарисовать его вручную на бумаге или доске либо воспользоваться специальной программой. В любом случае процедура создания дерева такова:
1. Начните с основного решения. Представьте его в виде небольшого квадрата и проведите вправо линии, каждая из которых символизирует возможное решение или действие. Подпишите каждую линию соответствующим образом.
2. Добавьте узлы принятия решений и узлы вероятности, соблюдая следующие правила:
- если требуется принять еще одно решение, нарисуйте новый прямоугольник;
- если точный результат неизвестен, нарисуйте круг (круги символизируют узлы вероятност