我正在尝试使用 PHP 和 MySQL 创建一个嵌套的无序列表(通过 CodeIgniter,尽管我认为这不相关)。
我见过许多似乎适用于具有两层嵌套的列表的解决方案,但我需要的解决方案必须具有三层。这就是我需要的东西:
<ul>
<li>Top Level, Item 1
<ul>
<li>Second Level, Item 1
<ul>
<li>Third Level, Item 1</li>
<li>Third Level, Item 2</li>
<li>Third Level, Item 3</li>
</ul>
<li>Second Level, Item 2
<ul>
<li>Third Level, Item 4</li>
<li>Third Level, Item 5</li>
<li>Third Level, Item 6</li>
</ul>
</li>
</ul>
</li>
</ul>
我的数据库的输出基本上是:
TOP LEVEL | SECOND LEVEL | THIRD LEVEL
Item 1 | Item 1 | Item 1
Item 1 | Item 1 | Item 2
Item 1 | Item 1 | Item 3
Item 1 | Item 2 | Item 4
Item 1 | Item 2 | Item 5
Item 1 | Item 2 | Item 6
我尝试过检查数据库的输出,使用变量来注册我所在的级别等,但是我在关闭每个列表时陷入了可怕的困惑。
有人可以建议一种方法吗?
最佳答案
查询
SELECT a.item, b.item, c.item FROM TOP_LEVEL a JOIN SECOND_LEVEL b ON b.level = a.level JOIN THIRD_LEVEL c ON c.level = b.level ORDER BY a.item, b.item, c.item
代码
<?php
$q = "SELECT a.item, b.item, c.item FROM TOP_LEVEL a JOIN SECOND_LEVEL b ON b.level = a.level JOIN THIRD_LEVEL c ON c.level = b.level ORDER BY a.item, b.item, c.item ";
...... your database stuff......
...... resulting array should be two-dimensional `$items` ......
$c = 0;
echo "<ul>\n";
while ($c < count($items)) {
for ($j = 0; $j < count($items[$c][0]); $j++) {
echo "<li>$items[$c][0]\n";
echo "<ul>\n";
for ($k = 0; $k < count($items[$c][1]); $k++) {
echo "<li>$items[$c][1]\n";
echo "<ul>\n";
for ($i = 0; $i < count($items[$c][2]); $i++) {
echo "<li>$items[$c][2]<\li>\n";
$c++;
}
echo "</ul>\n";
echo "</li>\n";
$c++;
}
echo "</ul>\n";
echo "</li>\n";
$c++;
}
echo "</ul>\n";
}
?>
关于php - PHP 和 MySQL 中的嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18063291/