Mysql
 sql >> Base de données >  >> RDS >> Mysql

Afficher le menu arborescent du parent sélectionné

Je vois un problème avec votre solution. Lorsque vous vérifiez l'ID if($id == $record->id) vous ne correspondez qu'au niveau actuel dans l'arborescence. c'est-à-dire que la sélection de Dell avec id =2 ne correspondra pas à la première itération, de sorte que votre fonction ne passera pas au niveau suivant.

Vous devez garder une trace du chemin d'accès au menu sélectionné.

Dans ton cas. Lorsque vous sélectionnez Dell, vous ne verrez que "Ordinateur", n'est-ce pas ?

Que diriez-vous de quelque chose comme ça :

...
  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));
...