Отображение иерархических данных

Я играю с примером кода, который я нашел здесь о «древовидном меню» и хотел задать этот вопрос.

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> 

Моя основная проблема заключается в том, чтобы найти уровень так или иначе, чтобы я мог умножить уровень * padding и создать свой список. Мы ценим любые предложения.

Вам нужна ваша 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>"; } } 

У меня есть магазин с рекурсивными категориями инвентаря, подобный тому, что вы делаете. Вот код, который я написал, чтобы представить его как неупорядоченный список (слегка измененный для этого примера). Надеюсь, поможет!

  /** * 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>"; }