-EDIT- <li>
可能会更好,但同样的问题仍然适用。
因此,只要能显示数据并获得预期结果,我就能完成所有工作。我的显示部分来自http://www.sitepoint.com/hierarchical-data-database-2/
的文章我有:
$right = array();
$show = "";
while ($row = mysql_fetch_array($title)) {
if (count($right)>0) {
while (count($right)>0&&($right[count($right)-1]<$row['rgt'])) {
array_pop($right);
}
}
$show .= str_repeat('->',count($right)).$row['title'].count($right)."<br>";
$right[] = $row['rgt'];
}
return $show;
它按预期工作。我现在要做的是将它们正确地包含在div中。所以我希望它看起来像:
<div>
Title
<div>
subtitle
<div>
subsubtitle
</div>
</div>
</div>
<div>
Title2
<div>
subtitle2
<div>
subsubtitle2
</div>
</div>
</div>
所以你可以看到顶部的标题div包含该div的所有子节点,依此类推。我不知道该如何解决这个问题。我可以看到我想要做的是,一旦count($right)
再次等于div的计数是何时关闭div,但是再次,不知道如何去做。
答案 0 :(得分:1)
一种方法是将数据组织成一个可以更容易迭代的结构:
$divs = array();
while ($row = mysql_fetch_array($title)) {
$divs[$row['left']] = array('type'=>'open', 'text'=>$row['title']);
$divs[$row['rgt']] = array('type'=>'close');
}
$divCount = count($divs);
for ($d=1; $d<$divCount; $d++) {
if ($divs[$d]['type'] == 'open') {
echo "<div>" . $divs[$d]['text'];
} else {
echo "</div>";
}
}