0

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

所以你可以看到顶部的 Title div 包含了该 div 的所有 subs,依此类推。我不知道该怎么做。我可以看到我想要做的count($right)是再次等于 div 的计数是何时关闭 div,但同样,不知道如何去做。

4

1 回答 1

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>";
    }
}
于 2012-03-29T18:49:18.783 回答