Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Budowanie drzewa z tablicy
Mayka
post
Post #1





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 12.01.2009
Skąd: Kanapa

Ostrzeżenie: (0%)
-----


Witam,
mam taki problemik... potrzebuje zrobić liste <ul><li> z tabeli.. niby pierdoła ale mam problem bo musze sprawdzić czy ma 'dzieci'.
tabela wyglada tak ->
  1. [0] => Array ( [id] => 2 [type] => [name] => asd [parent] => 1 )
  2. [1] => Array ( [id] => 49 [type] => [name] => asd [parent] => 0 )
  3. [2] => Array ( [id] => 48 [type] => Galeria [name] => Galeria [parent] => 0 )
  4. [3] => Array ( [id] => 24 [type] => 0 [name] => Home [parent] => 1 )
  5. [4] => Array ( [id] => 1 [type] => 0 [name] => Home2 [parent] => 0 )
  6. [5] => Array ( [id] => 39 [type] => formularz [name] => Kontakt [parent] => 1 )
  7. [6] => Array ( [id] => 33 [type] => [name] => sdfsdfsd [parent] => 1 )
  8. [7] => Array ( [id] => 25 [type] => 0 [name] => Druga strona [parent] => 1 ) )


A struktura musi wyglądać tak:
  1. <ul>
  2. <li id="id1" rel="folder"><a href="#">some category 1</a>
  3. <ul><li ><a href="#">some text</a></li></ul>
  4. <ul><li ><a href="#">some text</a></li></ul>
  5. <ul><li ><a href="#">some text</a></li></ul>
  6. <ul><li ><a href="#">some text</a></li></ul>
  7. <ul><li id="id1" rel="folder"><a href="#">some category 3</a>
  8. <ul><li ><a href="#">some text</a></li></ul>
  9. <ul><li ><a href="#">some text</a></li></ul>
  10. <ul><li ><a href="#">some text</a></li></ul>
  11. <ul><li ><a href="#">some text</a></li></ul>
  12. </li></ul
  13. </li>
  14. <li id="id2" rel="folder"><a href="#">some category 2</a>
  15. <ul><li ><a href="#">some text</a></li></ul>
  16. <ul><li ><a href="#">some text</a></li></ul>
  17. </li>
  18. </ul>


Jeśli ma potomków to jest rel="folder" tylko teraz jak to sprawdzić ?

Ten post edytował Mayka 7.11.2012, 14:37:06
Go to the top of the page
+Quote Post
Pawel_W
post
Post #2





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

Ostrzeżenie: (0%)
-----


utworzyć na bazie tej tablicy drugą, zawierającą już poukładane elementy (przelatujesz po obecnej i dodajesz do tablicy o indeksie parent nowy element)
Go to the top of the page
+Quote Post
Mayka
post
Post #3





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 12.01.2009
Skąd: Kanapa

Ostrzeżenie: (0%)
-----


No i za kazdym razem jak któryś element zostanie dodany, lub zmienione jego miejsce mam robić tablce ? Pozatym przesortować to można w zapytaniu mysql, tylko co to daje, bo nie bardoz rozumiem..?
Go to the top of the page
+Quote Post
viking
post
Post #4





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Gdybyś miał gotową tablicę wyników lepiej zrobioną łatwiej po niej jeździć iteratorami SPL http://php.net/manual/en/book.spl.php (w zasadzie sprawdzić tylko czy value jest tablicą) i do tego serwer BD wykona to szybciej niż parsowanie rekordów w PHP i tworzenie nowych sub tablic.

Ten post edytował viking 7.11.2012, 15:49:35
Go to the top of the page
+Quote Post
Mayka
post
Post #5





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 12.01.2009
Skąd: Kanapa

Ostrzeżenie: (0%)
-----


Cytat(viking @ 7.11.2012, 15:47:40 ) *
Gdybyś miał gotową tablicę wyników lepiej zrobioną łatwiej po niej jeździć iteratorami SPL


co masz na myśle mówiąc jepiej zrobioną ? Jeszcze moge ją przeprojektować (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
alegorn
post
Post #6





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

Ostrzeżenie: (0%)
-----


przy odpowiedniej strukturze tabel w mysql - te informacje mozesz uzyskac juz z bazy danych (jak rowniez odpowiednie posortowanie)

tutaj chyba kiedys popelnilem jakiegos posta
http://forum.php.pl/index.php?showtopic=13...t=0#entry955679


j.
Go to the top of the page
+Quote Post
zbychoCom
post
Post #7





Grupa: Zarejestrowani
Postów: 55
Pomógł: 9
Dołączył: 7.04.2011

Ostrzeżenie: (0%)
-----


Jeśli dane pobierane są z bazy to posortowałbym ją według 'parent'. Następnie w pętli (funkcji rekurencyjna) dorzucałbym do tablicy X-wymiarowej kolejne wiersze... Najważniejsze, żeby wynik z bazy był już posortowany na podstawie pola 'parent' (żeby nie opuścić żadnego elementu)...
Go to the top of the page
+Quote Post
Pawel_W
post
Post #8





Grupa: Zarejestrowani
Postów: 1 675
Pomógł: 286
Dołączył: 15.06.2009
Skąd: Wieliczka

Ostrzeżenie: (0%)
-----


Cytat(zbychoCom @ 7.11.2012, 16:02:59 ) *
Jeśli dane pobierane są z bazy to posortowałbym ją według 'parent'. Następnie w pętli (funkcji rekurencyjna) dorzucałbym do tablicy X-wymiarowej kolejne wiersze... Najważniejsze, żeby wynik z bazy był już posortowany na podstawie pola 'parent' (żeby nie opuścić żadnego elementu)...

to jest dokładnie to o czym mówiłem (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
alegorn
post
Post #9





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

Ostrzeżenie: (0%)
-----


@zbychoCom, @Pawel_W
można.... ale po co??

rekurencja? brrr..

coś takiego się robi jednym zapytaniem i jednym przejściem po elementach. koniec kropka.
j.

ps swoja droga, to co proponujecie - czyli drzewo oparte na parentId jest klasycznym przykładem antywzorca sql.. czasem się to stosuje, ale są o wiele wydajniejsze struktury.

Ten post edytował alegorn 7.11.2012, 16:55:02
Go to the top of the page
+Quote Post
Mayka
post
Post #10





Grupa: Zarejestrowani
Postów: 304
Pomógł: 1
Dołączył: 12.01.2009
Skąd: Kanapa

Ostrzeżenie: (0%)
-----


Cytat(alegorn @ 7.11.2012, 16:50:50 ) *
@zbychoCom, @Pawel_W
można.... ale po co??

rekurencja? brrr..

coś takiego się robi jednym zapytaniem i jednym przejściem po elementach. koniec kropka.
j.

ps swoja droga, to co proponujecie - czyli drzewo oparte na parentId jest klasycznym przykładem antywzorca sql.. czasem się to stosuje, ale są o wiele wydajniejsze struktury.


No dobra ale wszycycy napisali mniejwiecej jak to zrobić a ty mówisz że robi się jednym zapytaniem, a mogłbyś konkretniej ? Bo nie bardzo wiem co masz na myśli...
Go to the top of the page
+Quote Post
alegorn
post
Post #11





Grupa: Zarejestrowani
Postów: 341
Pomógł: 40
Dołączył: 23.06.2009

Ostrzeżenie: (0%)
-----


a patrzyłeś w link jaki podałem?

drzewka - temat maglowany jest przez programistów, od czasu gdy ktoś sobie wymyślił taka strukturę, a wiec od baaaardzo dawna.
wiem o 4 metodach ich przechowywania w bazie danych (omawiane kilku krotnie tu na forum), tak naprawde każde ma swoje wady i zalety, kwestia odpowiedniego wyboru dla konkretnego problemu..
w książce http://helion.pl/ksiazki/antywzorce-jezyka...rwin,antysq.htm znajdziesz opis 3 z nich z czego przykład z parent id jest podawany jako antywzorzec.

poczytaj sobie o metodzie trawestacji czy tez o nested tree (jakos tak to sie pisze)

w podanym powyżej linku dałem ci przykład SQL który wybiera drzewko posortowane, każdy rekord jest opisany na którym jest poziomie (lvl) oraz opisane ile ma elementów pod sobą (child_count).
oczywiście drzewko jest posortowane inteligentnie wg zależności drzewka - czyli z MySQL'a dostajesz w dokładnie takiej kolejności w jakiej masz wyświetlić na stronie....
coś a'la :

wezel0
wezel0.1
wezel0.2
wezel0.2.1
wezel0.2.2
wezel0.3
wezel0.4
wezel0.4.1
wezel0.4.1.1

masz posortowane drzewo, masz poziom na którym się znajduje element, ilość potomków... czego chcieć więcej (IMG:style_emoticons/default/questionmark.gif) (IMG:style_emoticons/default/questionmark.gif)

w dodatku, skrypt działa dla dowolnej liczby zagłębień... (jednym zapytaniem)
konia z rzędem dla tego co wykona to dla struktury opartej o parent_id...

j.

Ten post edytował alegorn 8.11.2012, 09:23:05
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.12.2025 - 04:27