显示分层数据

时间:2010-09-07 21:33:47

标签: php html hierarchical-data

我正在玩一个我在这里找到的关于'树状菜单'的代码示例,并想提出这个问题。

function tree($id)
{
$query = "SELECT `name`,`id` from `table` WHERE `id_parrent` = '$id'";
$result = mysql_query($query);
 if(mysql_num_rows($result) != 0)
   {
        echo "<ul>";
        while($row = mysql_fetch_array($result))
        {             
             echo "<li>",$row[name],"</li>";
             tree($row[id]);
        }
        echo "</ul>";
   }
}

如果我想以这样的方式显示项目怎么办:

<ul>
<li>item 1</li>
<li>item 2</li>
  <li style="padding-left:10px;">item 3-has parent 2</li>
   <li style="padding-left:20px;">item 4-has parent 3</li>
  <li style="padding-left:10px;">item 5-has parent 2</li>
<li>item 6</li>
</ul>

我的主要问题是以某种方式找到关卡,以便我可以乘以level * padding并创建我的列表。 任何建议将不胜感激。

2 个答案:

答案 0 :(得分:3)

您需要使用tree函数来跟踪关卡,然后在级别大于1时应用填充。

function tree($id, $level=1) {
    $query = "SELECT `name`,`id` from `table` WHERE `id_parrent` = '$id'";
    $result = mysql_query($query);
    if (mysql_num_rows($result) != 0) {
     echo "<ul>";
     while ($row = mysql_fetch_array($result)) {
         if ($level == 1)
             echo "<li>" . $row[name] . "</li>";
         else
          echo "<li style='padding-left: " + (($level - 1) * 10) + "px;'>" . $row[name] . "</li>";
         tree($row[id], $level + 1);
     }
     echo "</ul>";
    }
}

答案 1 :(得分:2)

我有一个商店,其递归库存类别与您正在进行的类似。这是我编写的代码,将其显示为无序列表(对于此示例稍作修改)。希望它有所帮助!

  /**
   * Inventory Categories
   */
  function inventoryCategories() {

    $result = mysql_query("select * from store_inventorycategory");

    $rows = array();

    while ($row = mysql_fetch_array($result)) {
      $p = $row['parent_category_id'];
      $id = $row['id'];
      $rows[$id] = array('id'=>$id, 'parent'=>$p, 'title'=>$row['title'], 'children'=>array());
    }

    foreach ($rows as $k=>&$v) {
      if ($v['parent'] == $v['id']) continue;
      $rows[$v['parent']]['children'][] = &$v;
    }

    array_splice($rows,1);

    echo '<ul>';
    recurseInventoryCategory($rows[0]);
    echo '</ul>';   
  }

  /**
   * display inventory category tree 
   */ 
  function recurseInventoryCategory ($o) {
    echo "<li><a href='store/{$o['id']}/'>{$o['title']}</a><ul class='list_indent'>";
    foreach ($o['children'] as $v) {
      recurseInventoryCategory($v);
    }
    echo "</ul></li>";
  }