Мне было интересно, как я могу отображать свои иерархические данные для создания моих категорий и бесконечных подкатегорий с помощью PHP и MySQL?
Быстрый пример того, как должен выглядеть мой код PHP и MySQL, очень поможет.
Структура категорий таблицы MySQL
id parent_id category 1 0 a & w 2 0 b & f 3 1 c & sometimes y 4 1 d
Конечно, это возможно. Этот код будет отображать иерархическое дерево <ul> <li>
, независимо от количества уровней
<?php //Connect to mysql server $cn = mysql_pconnect("server", "username", "password"); mysql_select_db("database_name"); $rs = mysql_query("SELECT id, parent_id, category FROM categories", $cn); $childrenTree = array(); //Will store an array of children for each parent $categoryNames = array(); //Will store category name for each id //We fill $childrenTree and $categoryNames from database while($row = mysql_fetch_array($rs)){ list($id, $parent_id, $category) = $row; $categoryNames[(string)$id] = $category; $parent_id = (string)$parent_id; if(!array_key_exists($parent_id, $childrenTree)) $childrenTree[$parent_id] = array(); $childrenTree[$parent_id][] = (string)$id; } //Main recursive function. I'll asume '0' id is the root node function renderTree($parent = "0"){ global $categoryNames; global $childrenTree; if($parent != "0") echo "<li> ", $categoryNames[$parent], "\n"; $children = $childrenTree[$parent]; if(count($children) > 0){ //If node has children echo "<ul>\n"; foreach($children as $child) renderTree($child); echo "</ul>\n"; } if($parent != "0") echo "</li>\n"; } renderTree(); //This renders the hierarchical tree ?>
Итоговый HTML для вашего примера будет:
<ul> <li> a & w <ul> <li> c & sometimes y </li> <li> d </li> </ul> </li> <li> b & f </li> </ul>
Это будет отображаться в браузере следующим образом:
Повторяю, это работает для любого уровня гнездования. Надеюсь это поможет.