【问题标题】:Building a html list tree from SQL table using PHP使用 PHP 从 SQL 表构建 html 列表树
【发布时间】:2011-11-10 15:34:36
【问题描述】:

我有这张桌子:

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

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

【问题讨论】:

  • 您示例中的数字与表中的数字不匹配。你能用给定的表格做一个例子吗?
  • 此示例仅用于说明。我真的不能用这个表做一个例子,因为它有超过 20k 个条目。
  • @Ghinzu,Bazzz 表示您在问题顶部包含的示例数据与问题末尾的示例输出中的数据不匹配。请问您可以编辑它们以使它们匹配吗?
  • @MarkBannister Bazzz,做了一个例子。感谢您的投入!

标签: php sql database tree hierarchy


【解决方案1】:

如上所述,在表格中使用嵌套集表示是有意义的。如果你决定保留现有的表结构,那么一般的做法是使用递归函数:

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

上面的代码不用说是伪代码,但它应该展示了大致的想法。该函数在单个节点上执行,如果该节点有子节点,它会在每个子节点上调用 itself。这称为递归。作为一种常见的编程约定:有子节点的节点称为分支,没有子节点的节点称为叶子。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-19
      • 2011-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多