0

-編集-<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を閉じるタイミングですが、どうすればよいかわかりません。

4

1 に答える 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 に答える