PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PHP: Baumstruktur abbilden


BoneDaddy
2007-02-08, 23:13:40
Hallo, ich habe ein riesen Brett vor dem Kopf. :-(
Ich möchte eine Baumstruktur order Ordernerstruktur in einem PHP-Array abbilden. Meine Daten beziehe ich aus einer Datenbank und umfassen bis jetzt:


id fatherid
1 0
2 1
3 2
4 0
5 4
6 1


Sprich jeder Eintrag hat einen Vater, dem er zugeordnet ist. Das Problem ist nun, es so auszulesen, dass ich ein Array erhalte, was jeweils den Vater und eben seine Kinder beinhaltet.

array
[0]
array [0] = Vater
array [1] =
array[0] = Kind 1
array[1] = Kind 2

[1]
array[0] = Vater 2
array[1] =
array[0] = Kind 3
array[0] = Kind 4

Tricky ist natürlich, dass unendliche viele Verzweigungen möglich sein sollten. Vielleicht bin ich mit meiner Lösung auch völlig auf dem Holzweg, jedenfalls ist so schon ein ganzer Tag ins Land gegangen. :-(

Bitte helft mir.

ethrandil
2007-02-09, 01:11:30
Deine Baumrepräsentation ist ein bisschen komisch. D.H. ich habe sie noch nicht verstanden.
Kann der Baum beliebig tief sein? Wie wärs mit sowas:



array [0] = "Wurzel"
[1]
array [0] = "Vater"
array [1] = array[0] = "Kind 1"
array [2] = array[0] = "Kind 2"

[1]
array [0] = "Vater 2"
array [1] = array [0] = "Kind 3"
[1] = "Kindeskind 3a"
array [2] = array[0] = "Kind 4"


Diese repräsentation fände ich angenehmer. Dafür lässt sich auch eine kürzere Funktion schreiben, imho...

mfg
-eth

Xmas
2007-02-09, 14:24:46
Die Frage ist, wie du diese Struktur überhaupt verwenden willst. Bekommst du z.B. irgendwo eine Parent-ID her und musst dazu die Unterknoten finden? Dann willst du ja ein Mapping ID -> Kinder.
children[0] = [1, 4]
children[1] = [2, 6]
children[2] = [3]
children[4] = [5]
Allerdings kenne ich mich mit PHP nicht aus.

darph
2007-02-09, 18:04:05
Muß es denn ein Array sein? Bau dir doch einen normalen Baum.

robobimbo
2007-02-11, 15:12:12
Oder schau dir mal Nested-Sets an - ist ein sehr verständlicher Artikel - http://www.klempert.de/nested_sets/artikel/

BoneDaddy
2007-02-15, 22:39:28
habe es nun mit verschachtelten Objekten gelöst. In meinen Augen eine sehr gute Lösung. :-)