Træ struktur?

Tags:    php

Hej

Jeg har nu i meget lang tid kigget på træ strukturer i databaser, og jeg har fundet ud af at ved at gemme alle mine entries med en left og right værdi og så bruge preorder tree traversal, så er det smartest, hurtigt men dog ikke nemmest.

MEN: jeg kan ikke finde ud af hvordan jeg hiver en enkelt gren af træet ud.

f.eks.
Frugter(id:1)
-Gule(id:2)
--Bannan(id:3)
---Brasilianske(id:10)
---Afrikanske(id:11)
--Appelsin(id:4)
-Røde(id:5)
--Jordbær(id:6)
--Æbler.røde(id:7)
-Grønne(id:8)
--Æbler.grønne(id:9)

Hvis en bruger har bevæget sig i træet, til id:3 så skal dens "parent" vises og alle elementer på samme niveau som parent, men ikke deres under elementer. Derudover vil jeg også gerne vise alle childs af det aktuelle element.

mit resultat af den funktion skulle så gerne se sådan ud:
Frugter(id:1)
-Gule(id:2)
--Bannan(id:3)
---Brasilianske(id:10)
---Afrikanske(id:11)
--Appelsin(id:4)
-Røde(id:5)
-Grønne(id:8)

Hvordan gør jeg det? og hvis der er nogen der kan forklare mig hvordan man gør "The OOP-way" så ville det være ekstra bonus.

MVH

Nicolai



3 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 4 karma
Sorter efter stemmer Sorter efter dato
Fold kodeboks ind/udPHP kode 


Det er det typiske setup jeg plejer at bruge...



Indlæg senest redigeret d. 06.06.2008 10:59 af Bruger #10216
Undskyld jeg var så upræcis i mit første indlæg.

lidt forklaring skader vel ikke:
Jeg er igang med at lave et CMS, der gerne skulle kunne skaleres fra 10 til 10.000 sider.

hvordan laver skulle koden til at lave denne struktur være? vi snakker stadig om at få samme resultat som i første indlæg. Altså parents siblings og parents parents siblings osv. plus childrens.

Og så lige et spørgsmål til Gnu, hvordan vil du opbevare dine data til dit træ? i xml eller udskrive arrayet til en txt eller i en database(MySQL) og hvis i en flad DB hvordan gemmer du så strukturen i træet?

*EDIT* Jeg har kigget på modified preorder tree traversal og adjacency List. Med det resultat at det ville være MEGET langsomt med sidst nævnte



Indlæg senest redigeret d. 06.06.2008 14:07 af Bruger #9812
Dataen ville jeg gemme i en database, til at starte med. Strukturen starter med et id og et childof id der refererer til id.
Da laves et udtræk af alle punkter, hvorefter PHP bruges til at bygge et hierarkisk array a la det jeg har vist tidligere. (Du kan nok finde noget på google der kan gøre det for dig, jeg kan ikke lige finde mit eget eksempel.)
Med dette array kan man så cache det til en flad fil. Så man ikke bruger tid på strukturen om og om igen. Du kan også lave det om til et treenode med ovenstående kode, og så cache den i stedet.

Den kode jeg har smidt til at søge med, en simpel forward search mekanisme. Der søger fra top og ned i hver enkelt gren. Her må du finde på en metode til at søge i hver grens første niveau.



t