3 Stimmen

Datenbankbaum zu mehrdimensionalem Array

Ich habe eine einfache Datenbank-Baum mit parentid und ich möchte die DB zu lesen und erhalten ein Array wie oben

Array
(
 Title: Category 1
 Children => Array
             (
              => Title: Category 1.1

              => Title: Category 1.2
                     Children =>  Array
                               (
                                => Title: Category 1.2.1

                               )
              ) 

)

Ich versuche, mit obigem Code zu implementieren

    function getTree($rootid)
    {
       $result = =mysql_query("select * from tree where parentid='$rootid'");
       while ($row = mysql_fetch_array($result)) { 

        $arr[]=$row["Title"];
        getChilds($row["id"]);

      }

    }

   function getChilds($id)
    {
       $result = =mysql_query("select * from tree where parentid='$id'");
       while ($row = mysql_fetch_array($result)) { 

        //childers nodes here
        $arr[]=$row["Title"];

        getChilds($row["id"]);

      }

    }

}

Ich habe ein Problem, wie man das Array an die Rekursionsfunktion übergeben, so weiter Kinder aus dem letzten Knoten ich schrieb und so weiter.

Sein implementieren innerhalb einer Klasse und ich weiß, ich muss als & $arr übergeben, aber ich bin nicht sicher, wie

Jede Hilfe ist willkommen

Danke

4voto

Matthew Punkte 46409

Versuchen Sie so etwas:

<?php
function getTree($rootid)
{
   $arr = array();

   $result = mysql_query("select * from tree where parentid='$rootid'");
   while ($row = mysql_fetch_array($result)) { 
     $arr[] = array(
       "Title" => $row["Title"],
       "Children" => getTree($row["id"])
     );
   }
   return $arr;
}
?>

3voto

Flavius Punkte 12995

Wie bereits erwähnt hier drüben unter Verwendung der Adjazenzlistenmodell ist kein guter Ansatz. Verwenden Sie lieber Pre-Order Tree Traversal .

Warum? Sehen Sie, die meiste Zeit (sprich: in 99,99% der Fälle) wird der Engpass Ihrer Anwendung die Datenbank sein. Preorder Tree Traversal sieht in der Tat komplizierter aus (vor allem, weil es nicht nach Ihren Daten in ihrem "natürlichen" Zustand modelliert ist, rekursiv), aber Sie müssen nur einmal eine Abfrage senden, und Sie sind fertig. Außerdem wird Ihre Anwendung in 99 % der Anwendungsfälle den Baum nur anzeigen und nicht verändern/umordnen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X