![]() Mailinglisten-Archive |
Hallo Liste! Ich komme einfach nicht mit dem auslesen einer Baumstruktur zurecht: Zwecks einer dynamischen Navigation habe ich eine Mysqltabelle mit der folgenden Struktur erstellt: ID, ParentID, Caption, Link usw.. Ich m�chte die Struktur nun als Array auslesen. Hiermit genau habe ich Schwierigkeiten: Ich habe es hinbekommen, durch einen rekursiven Aufruf die Navigationstexte direkt, sogar entsprechend ihrer Ebene einger�ckt auszugeben. Ich will aber nicht direkt ausgeben, sondern ein Array aufbauen. Ich k�nnte das Problem mit einer "Array-Aufbau-klasse" l�sen, in der ich wie folgt aufrufe: $tree->addChild("id","caption","link","parent"); und $tree->addParent("id","caption","link"); Ich wei� halt �berhaupt nicht, wie ich so eine Klasse erstellen k�nnte. Kennt da jemand vielleicht etwas fertiges? oder einen Ansatz? Ich habe das Problem jetzt vorerst so gel�st: Es wird ein Befehl f�r den Arrayaufbau Schritt f�r Schritt rekursiv zusammmengesetzt, danach wird der Code per eval() ausgef�hrt. Ich erreiche zwar die gew�nschte Arraystruktur, es gibt aber bestimmt sch�nere/schnellere L�sungen. Hier noch die momentane Funktion: function createEvalCode($ID=0) { global $db; $sql = "SELECT * FROM WK_navigation WHERE ParentID='".$ID."'"; $result = $db->query($sql); while($row = $result->fetchRow(DB_FETCHMODE_ASSOC)) { if($row['ParentID'] != "0") { $this->pointer[] = $row['ParentID']; } $this->evalCode .= "\$this->tree"; if(count($this->pointer) > 0) { $this->evalCode .= "['".implode("']['element']['",$this->pointer)."']['element']"; } $this->evalCode .= "['".$row['ID']."'] = array('caption' => '".$row['Betreff']."','link' => '".$row['link']."');\n\r";$this->createEvalCode($row['ID']); $history = substr($history,0,strrpos($history,"|")); array_pop($this->pointer); } } Gruss Julian
php::bar PHP Wiki - Listenarchive