繁体   English   中英

使用PHP从SQL表构建html列表树

[英]Building a html list tree from SQL table using PHP

我有这张桌子:

+-------------------------------+
| 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

...我需要使用<ul><li>从中构建html树列表。 此表中的每个节点都是顶级节点的子节点,其id为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>

也许有人解决了同样的问题? 任何帮助,将不胜感激。 谢谢!

如上所述,在表中使用嵌套集表示是有意义的。 如果您决定保留现有的表结构,那么执行它的一般方法是使用以下行的递归函数:

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

不用说上面的代码是伪代码,但它应该证明一般的想法。 该函数在单个节点上执行,如果该节点有子节点,则在每个子节点上调用它自己 这叫做递归 作为一种常见的编程约定:具有子节点的节点称为分支,而不具有子节点的节点称为叶子。

如果您的表格布局需要重新设计,我会使用左右表格布局,就像本文中列出的那样。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM