Создание html-списка из таблицы SQL с использованием PHP - PullRequest
1 голос
/ 10 ноября 2011

У меня есть эта таблица:

+-------------------------------+
| NodeID | Parent | HasChildren |
+-------------------------------+
|1000000 |-1      |-1           |
+--------+--------+-------------+
|2409999 |1000000 |-1           |
+-------------------------------+
|2510921 |1000000 |-1           |
+-------------------------------+
|2596822 |2510921 |0            |
+-------------------------------+
|3000143 |2409999 |0            |
+-------------------------------+
|3125674 |2409999 |0            |
................................
       the list goes on

... из которого мне нужно построить список дерева HTML, используя <ul> и <li>. Каждый узел в этой таблице является дочерним по отношению к верхнему узлу с идентификатором 1000000 (у которого есть родительский элемент «-1»). Также HasChildren "-1" сообщает, что у этого узла есть дочерние элементы, 0 - у него нет. Да, это странное соглашение, но оно так и есть. Итак, вывод должен быть таким:

<ul>
  <li>2409999</li>
  <ul>
    <li>3000143</li>
    <li>3125674</li>
  </ul>
  <li>2510921</li>
  <ul>
    <li>2596822</li>
  </ul>
....
</ul>

Возможно, кто-то решил ту же проблему? Любая помощь будет оценена. Спасибо!

Ответы [ 2 ]

3 голосов
/ 10 ноября 2011

Как упомянуто выше, имеет смысл использовать представление вложенного набора в вашей таблице.Если вы решите сохранить существующую структуру таблицы, то общий способ сделать это - создать рекурсивную функцию в соответствии с:

function printBranch($parentID) {
    foreach ($children as $child) {
        if ($child is a Leaf) echo '<li>child</li>';
        elseif ($child is a Branch) printBranch($child);
    }
}

Нет необходимости говорить, что приведенный выше код является псевдокодом, но этодолжен продемонстрировать общую идею.Функция выполняется на одном узле, и если у этого узла есть дочерние элементы, она вызывает сама для каждого дочернего элемента.Это называется рекурсия .Как общее соглашение программирования: узлы, имеющие дочерние элементы, называются ветвями, а узлы, которые не называются конечными.

0 голосов
/ 10 ноября 2011

Если ваш макет таблицы готов к редизайну, я бы использовал макет таблицы слева направо, как показано в этой статье.

http://www.sitepoint.com/hierarchical-data-database-2/

...