Saya melihat satu masalah dengan solusi Anda. Saat Anda memeriksa ID if($id == $record->id)
Anda hanya akan cocok dengan level saat ini di pohon. yaitu memilih Dell dengan id=2 tidak akan cocok dengan iterasi pertama sehingga fungsi Anda tidak akan berpindah ke level berikutnya.
Anda perlu melacak jalur ke menu yang Anda pilih.
Dalam kasus Anda. Saat Anda memilih Dell, Anda hanya akan melihat "Komputer", benar?
Bagaimana dengan yang seperti ini:
...
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));
...