Показать меню дерева выбранного родителя
Здесь я строю дерево меню. Доступ к категории осуществляется по ее идентификатору и дочернему элементу. Моя функция отлично работает для двухуровневого меню, но не может создать третий уровень. Меню третьего уровня должно отображаться только в том случае, если щелкнул идентификатор элемента второго уровня. Мне нужна эта функция, чтобы отслеживать путь к узлу тоже. Что если указан идентификатор третьего уровня, то дерево должно быть расширено до третьего уровня. то есть родительский ребенок, и если у этого родителя тоже есть родитель. MySQL Table
+-------+-----------+------------+
| id | title | parent_id |
+-------+-----------+------------+
| 1 | Comput,ers | NULL |
+-------+-----------+------------+
| 2 | Dell | 1 |
+-------+-----------+------------+
| 3 | Laptops | 2 |
+-------+-----------+------------+
| 4 | Desktops | 2 |
+-------+-----------+------------+
| 5 | HP | 1 |
+-------+-----------+------------+
Код PHP
<?php
$sql = "SELECT * FROM category";
$statement= $db->prepare($sql);
$statement->execute();
$categories = array();
$rootCategories = array();
while ( $row = $statement->fetchObject() ) {
$row->childs = array();
$categories[$row->id] = $row;
if(empty($row->parent_id)) {
$rootCategories[$row->id] = $categories[$row->id];
} else {
$categories[$row->parent_id]->childs[] = $categories[$row->id];
}
}
function rederTreeById($records, $id=false) {
echo '<ul>';
foreach($records as $record) {
if($id == $record->id) {
echo '<li>'.$record->title;
if(!empty($record->childs)) {
rederTreeById($record->childs);
}
echo '</li>';
} else {
echo '<li>'.$record->title.'</li>';
}
}
echo '</ul>';
}
rederTreeById($rootCategories, 1);
?>
Например, если нажали Компьютеры, то
компьютерDellHPесли Dell нажал тогда
компьютерDellНоутбукиНастольные компьютерыHP