Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Lista kategorii
Forum PHP.pl > Forum > Przedszkole
nexis
Struktura baza danych wygląda następująco:

  1. ++++++++++++++++++++++++++++
  2. + 1 + 0 + Komputery +
  3. + 2 + 0 + Monitory +
  4. + 3 + 0 + Drukarki +
  5. + 4 + 2 + 17 cali +
  6. + 5 + 2 + 19 cali +
  7. + 6 + 3 + monochromatyczne +
  8. + 7 + 6 + laserowe +
  9. ++++++++++++++++++++++++++++


Pierwsza kolumna to zwyczajnie identyfikator kategorii, druga kolumna to identyfikator kategorii nadrzędnej (gdzie "0" to informacja o braku kategorii nadrzędnej), a trzecia kolumna to oczywiście słowna nazwa kategorii.

Tak skonstruowana lista, przy sortowaniu alfabetycznym, powinna wyglądać następująco:

  1. |-+ Drukari
  2. | |
  3. | |-+ monochromatyczne
  4. | |
  5. | |- laserowe
  6. |
  7. |-- Komputery
  8. |
  9. |-+ Monitory
  10. |
  11. |- 17 cali
  12. |
  13. |- 19 cali


Samo wyświetlenie mógłbym zrealizować używając rekurencji:

  1. <?php
  2. function lista ($category) {
  3. $query = "SELECT id, label FROM categories WHERE supercat = '$category' ORDER BY label";
  4. $query = mysql_query($query);
  5. echo '<ul>';
  6. while ($row = mysql_fetch_array($query)) {
  7. echo '<li>' . $row['label'] . '</li>';
  8. lista($row['id']);
  9. }
  10. echo '</ul>';
  11. }
  12.  
  13. lista(0);
  14. ?>


Ale jak mogę taką listę wrzucić do tablicy wielowymiarowej?
abc667
ale chodzi ci o to by wrzucić to do tablicy wielowymiarowej koniecznie czy żeby użyć jednego zapytania?

bo jeśli chodzi o jedno zapytanie to

  1. <?php
  2. $query = 'SELECT id, label, supercat FROM categories ORDER BY label';
  3.  
  4. ...
  5.  
  6. $lista = array();
  7. while($row = mysql_fetch_array($query)) {
  8. $lista[ $row['supercat'] ][] = array('id' => $row['id'], 'label' => $row['label']);
  9. }
  10.  
  11.  
  12. function lista($id = 0)
  13. {
  14. global $lista;
  15.  
  16. echo '<div style="padding-left: 15px;">';
  17. for($i=0;$i<count($lista[ $id ]);$i++)
  18. {
  19. echo $lista[$id][$i]['label'] . '<br />';
  20. if(count($lista[ $lista[$id][$i]['id'] ])) lista($lista[$id][$i]['id']);
  21. }
  22. echo '</div>';
  23. }
  24.  
  25. lista();
  26. ?>
nexis
Cytat
ale chodzi ci o to by wrzucić to do tablicy wielowymiarowej koniecznie czy żeby użyć jednego zapytania?


Chodzi o to, żeby głębokość zagnieżdżeń była nieskończona (w podanym przez Ciebie kodzie ogranicza się do 3).
abc667
a czego akurat do 3?
przecież funkcja lista wywoływana jest rekurencyjnie?
nexis
Cytat(abc667 @ 28.06.2007, 16:27:37 ) *
a czego akurat do 3?


Zrób sobie taką tabelkę i dodaj np. "drogie" do "laserowe". Odpal swój kod i zobacz jaki będzie efekt.
abc667
efekt jest taki jakiego oczekiwałem czyli że działa bezproblemowo ?
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.