Array-Baum-Erstellung aus Datenbank-Tabelle

  • Meine PHP-Funktion

     function generateMenu($parent, $level, $menu, $utype) {
        global $db;
        $tree = array();
        $stmt = $db->prepare("select id, parent, name FROM navigation WHERE menu=? AND user_type=?") or die($db->error);
        $stmt->bind_param("ii", $menu, $utype) or die($stmt->error);
        $stmt->execute() or die($stmt->error);
        $stmt->store_result();
        $meta = $stmt->result_metadata();
        $stmt->bind_result($id, $parent, $name);
        while ($stmt->fetch()) {
            $arr[$id] = array(
                'name' => $name, 
                'parent' => $parent
            );
            if (!array_key_exists($parent,$arr) and $parent != 0) {
                $arr[$parent][$id] = $id;
            }
        }
        $stmt->close();
    }
     

    generiert folgendes Array aus der Db-Tabelle. [1], [2] ... - sind IDs von li item

     Array (
        [1] => Array ( 
            [name] => Parent1
            [parent] => 0
        ) 
        [2] => Array ( 
            [name] => Parent2
            [parent] => 0 
        )
        [3] => Array (
            [name] => Parent3 
            [parent] => 0 
        )
        [4] => Array ( 
            [name] => Child1 of P1
            [parent] => 1
        ) 
        [5] => Array (
            [name] => Child2 of P1
            [parent] => 1
        ) 
    )
     

    Was ich machen möchte ist das Erstellen das Menü wie dieses

     <ul>
      <li><a href="?page=1">Parent1</a>
        <ul>
          <li><a href="?page=4">Child1 of P1</a></li>
            ...
     

    Die zweite Funktion dient zum Erzeugen eines Menüs aus diesem Array. Aber ich weiß, dass ich es vor dem Senden dieses Arrays in eine zweite Funktion in ein mehrdimensionales Baumarray konvertieren muss. Kann nicht herausfinden, wie es geht? Bitte helfen Sie in dem angegebenen Beispiel.

    Hier ist die zweite Funktion

     function olLiTree($tree) {
        $out = '<ul>';
    
        foreach($tree as $key => $value) {
            $out.= '<li>';
    
            if (is_array($value)) {
                $out.= $key . olLiTree($value);
            } else {
                $out.= $value;
            }
    
            $out.= '</li>';
        }
    
        $out.= '</ul>';
    
        return $out;
    }
     

    DB-Struktur

    Array-Baum-Erstellung aus Datenbank-Tabelle

    25 November 2011
    Bill Karwin
1 answer
  • Sie haben nur einen Parameter an array_key_exists() . Ich denke, Sie möchten isset() verwenden, um zu prüfen, ob dieses Element in vorhanden ist das Array.

     array_key_exists($id, $tree[$parent]['children']);
     

    Sollte ungefähr gleich sein:

     isset($tree[$parent]['children'][$id]);
     
    22 November 2011
    Jonathon Reinhart