phpbar.de logo

Mailinglisten-Archive

[php] Baumstruktur Mysql->Array (nicht Nested set Modell)

[php] Baumstruktur Mysql->Array (nicht Nested set Modell)

julian.schwarz at iskomedia.de julian.schwarz at iskomedia.de
Don Nov 3 17:09:45 CET 2005


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