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