sql >> Database >  >> RDS >> Mysql

Toon boommenu van geselecteerde ouder

Ik zie een probleem met uw oplossing. Wanneer u controleert op ID if($id == $record->id) u komt alleen overeen met het huidige niveau in de boom. d.w.z. het selecteren van Dell met id=2 komt niet overeen met de eerste iteratie, dus uw functie gaat niet naar het volgende niveau.

U moet het pad naar het door u geselecteerde menu volgen.

In jouw geval. Als u Dell selecteert, ziet u alleen "Computer", heb ik gelijk?

Wat dacht je van zoiets:

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



  1. Een groot probleem:SQL Server 2016 Service Pack 1

  2. Het eerste teken DISTINCT van een veld retourneren (MySQL)

  3. Hele woorden matchen met punttekens in MySQL

  4. PHP:mysql_fetch_array() verwacht dat parameter 1 resource is, boolean gegeven