Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Grupowanie danych w tablicy
Forum PHP.pl > Forum > Przedszkole
GreenGo
Witam, zapisałem dane z bazy w tablicy, która wygląda teraz następująco:
Kod
Array (
[0] => Array ( [0] => www [1] => asd [2] => asd [3] => test )
[1] => Array ( [0] => Argania [1] => CapeDun [2] => Zad 4 [3] => test 4 )
[2] => Array ( [0] => Argania [1] => Montera [2] => Zad 3 [3] => test 3 )
[3] => Array ( [0] => www [1] => asd [2] => aaaaaaa [3] => sd sda sad asd )
[4] => Array ( [0] => Argania [1] => Velmord [2] => Zad 1 [3] => test test test test )
[5] => Array ( [0] => Argania [1] => Velmord [2] => Zad 2 [3] => test 2 test 2 tst 2 test 2 )
)

Chciałbym aby wyświetliły mi się nazwy o indexach [x][0] (czyli www, Argania, Argania, www, Argania, Argania) ale nie powtarzając się czyli tylko www oraz Argania. Po kliknięciu na jedną z tych nazw chciałbym aby pokazały się nazwy o idexach [x][1] ale również nie powtarzając się i należące do poprzedniego indexu czyli po kliknięciu w Argania chciałbym aby wyświetliło się "CapeDun" "Montera" i "Velmord". Chciałbym aby powstało takie drzewiaste menu ale niestety nie mam pojęcia jak to zrobić mając wszystko w takiej tablicy. Zrobiłem to przekazując dodatkowe zmienne w adresie i na ich podstawie wyświetlając kolejne dane ale do tego było potrzebne dużo zapytań przez co nie było to wydajne rozwiązanie.
Graficznie chciałbym osiągnąć coś takiego po kliknięciu w Arganie a potem w Velmord:
Kod
-Argania
-----CapeDun
-----Montera
-----Velmord
---------Zad 1
---------Zad 2
-www


Byłbym wdzięczny za pomoc i mam nadzieje, że zostałem zrozumiany smile.gif


bastard13
Przy ładowaniu strony pobieraj tylko pierwsze nazwy:
  1. SELECT nazwa_kol_0 FROM tabela group_by nazwa_kol_0;

wynik wyświetlasz w postaci dwóch linków i do każdego podpinasz zdarzenie onclick, a w nim funkcja pobierająca za pomocą AJAX'a kolejne nazwy tzn. dla kliknięcia na Argania powoduje wywołanie funkcji wysyłającej zapytanie do pliku na serwerze, który zwraca wynik zapytania:
  1. SELECT nazwa_kol_1 FROM tabela WHERE nazwa_kol_0='Argania' group_by nazwa_kol_1;

funkcja AJAX odbiera wynik i dodaje kolejne linki, które działają tak, jak te wcześniejsze.
GreenGo
No tak, ale to powoduje generowanie wielu zapytań do bazy.
Ja chciałbym osiągnąć taki rezultat wykonując tylko jedno zapytanie i od razu zapisując wszystkie dane do tablicy z której potem właśnie chcę stworzyć takie menu. Da się to tak zrobić ?
Noidea
http://www.google.com/search?q=SQL+Hierarchical+Data - da się bez zapytań w pętli.

Możesz też zbudować sobie drzewko na podstawie tablicy:
  1. <?php
  2.  
  3. $array = array (
  4. array ( 'www', 'asd', 'asd', 'test' ),
  5. array ( 'Argania', 'CapeDun', 'Zad 4', 'test 4' ),
  6. array ( 'Argania', 'Montera', 'Zad 3', 'test 3' ),
  7. array ( 'www', 'asd', 'aaaaaaa', 'sd sda sad asd' ),
  8. array ( 'Argania', 'Velmord', 'Zad 1', 'test test test test' ),
  9. array ( 'Argania', 'Velmord', 'Zad 2', 'test 2 test 2 tst 2 test 2' ),
  10. );
  11.  
  12.  
  13. $tree = array();
  14.  
  15. foreach( $array as $line )
  16. {
  17. $pointer = &$tree;
  18.  
  19. foreach( $line as $value )
  20. {
  21. if( !array_key_exists( $value, $pointer ) )
  22. {
  23. $pointer[$value] = array();
  24. }
  25.  
  26. $pointer = &$pointer[$value];
  27. }
  28. }
  29.  
  30. echo "<pre>";
  31. print_r( $tree );
  32. echo "</pre>";
  33.  
  34.  
  35. // Sortowanie
  36. function recursiveKSort( &$array )
  37. {
  38. ksort( $array );
  39.  
  40. foreach( $array as &$item )
  41. {
  42. if( is_array( $item ) )
  43. {
  44. recursiveKSort( $item );
  45. }
  46. }
  47. }
  48. recursiveKSort( $tree );
  49.  
  50.  
  51. echo "***<pre>";
  52. print_r( $tree );
  53. echo "</pre>";
  54.  
  55. ?>
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.