Tôi thấy một vấn đề với giải pháp của bạn. Khi bạn kiểm tra ID if($id == $record->id)
bạn sẽ chỉ phù hợp với cấp độ hiện tại trong cây. tức là chọn Dell với id =2 sẽ không khớp với lần lặp đầu tiên, vì vậy hàm của bạn sẽ không chuyển sang cấp độ tiếp theo.
Bạn cần theo dõi đường dẫn đến menu đã chọn của mình.
Trong trường hợp của bạn. Khi bạn chọn Dell, bạn sẽ chỉ thấy "Máy tính", tôi có đúng không?
Làm thế nào về một cái gì đó như thế này:
...
function rederTreeById($records, $path) {
echo '<ul>';
foreach($records as $record) {
if(in_array($record->id, $path)) {
echo '<li>'.$record->title;
if(!empty($record->childs)) {
rederTreeById($record->childs, $path);
}
echo '</li>';
} else {
echo '<li>'.$record->title.'</li>';
}
}
echo '</ul>';
}
function getPath($id) {
$path = array();
$current=$id;
$path[] = 1
while(!is_null($categories[$current]->parent_id)) {
$current=$categories[$current]->parent_id
$path[] = $current;
}
return $path;
}
$selectedId = 1;
rederTreeById($rootCategories, getPath($selectedId));
...