-7

DB構造は次のとおりです。

INSERT INTO categories (title, lft, rgt) VALUES ('Cat 1',1,16);
INSERT INTO categories (title, lft, rgt) VALUES ('Cat 2',2,3);
INSERT INTO categories (title, lft, rgt) VALUES ('Cat 3',4,7);
INSERT INTO categories (title, lft, rgt) VALUES ('Cat 4',5,6);
INSERT INTO categories (title, lft, rgt) VALUES ('Cat 5',8,13);
INSERT INTO categories (title, lft, rgt) VALUES ('Cat 6',9,12);
INSERT INTO categories (title, lft, rgt) VALUES ('Cat 7',10,11);
INSERT INTO categories (title, lft, rgt) VALUES ('Cat 8',14,15);  

このクエリを実行すると:

SELECT n.title, COUNT(*)-1 AS depth FROM categories AS n, categories AS p WHERE  n.lft BETWEEN p.lft AND p.rgt GROUP BY n.lft ORDER BY n.lft;

$result = mysql_query($query);

// Build array
$tree = array();
while ($row = mysql_fetch_assoc($result)) {
  $tree[] = $row;
}

その後、次の機能を使用できます。

// bootstrap loop
    $result = '';
    $currDepth = -1;  // -1 to get the outer <ul>
    while (!empty($tree)) {
      $currNode = array_shift($tree);
      // Level down?
      if ($currNode['depth'] > $currDepth) {
        // Yes, open <ul>
        $result .= '<ul>';
      }
      // Level up?
      if ($currNode['depth'] < $currDepth) {
        // Yes, close n open <ul>
        $result .= str_repeat('</ul>', $currDepth - $currNode['depth']);
      }
      // Always add node
      $result .= '<li>' . $currNode['title'] . '</li>';
      // Adjust current depth
      $currDepth = $currNode['depth'];
      // Are we finished?
      if (empty($tree)) {
        // Yes, close n open <ul>
        $result .= str_repeat('</ul>', $currDepth + 1);
      }
    }

    print $result;

誰もがなしでツリーの上に印刷する方法を教えてもらえます <ul> and <li>.?子と子を対象に印刷したいのですが...リストや他のHTMLタグ&nbsp;に入れなければならないので<select>

私が使用している構造は次のとおりです。 変更されたプレオーダーツリートラバーサルモデル(ネストされたセット)を<ul>に取得する

4

1 に答える 1

0

緊急の対応として(そしてテストされていない)、depth各要素/ノードのをすでに持っているので、それぞれ&nbsp;に出力するブロックの数にそれを使用し、各行を<br />(要素をいくつかで区切る必要がない限り)で終了することができます他の意味)。

スペースを出力する関数を試してみてください。これは次のような単純なものである必要があります。

function _tab($depth) {
    $tabs = '';
    while ($depth-- > 0) $tabs .= '&nbsp;&nbsp;&nbsp;&nbsp;';
    return $tabs;
}

// bootstrap loop
$result = '';
while (!empty($tree)) {
    $currNode = array_shift($tree);
    $result .= _tab($currNode['depth']) . $currNode['title'] . '<br />';
}

print $result;
于 2012-10-02T14:17:39.537 に答える