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