Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Lista kategorii, tablica wielowymiarowa
nexis
post
Post #1





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

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


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?

Ten post edytował nexis 28.06.2007, 14:06:22


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
abc667
post
Post #2





Grupa: Zarejestrowani
Postów: 229
Pomógł: 0
Dołączył: 29.05.2007

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


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. ?>
Go to the top of the page
+Quote Post
nexis
post
Post #3





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

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


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).


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
abc667
post
Post #4





Grupa: Zarejestrowani
Postów: 229
Pomógł: 0
Dołączył: 29.05.2007

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


a czego akurat do 3?
przecież funkcja lista wywoływana jest rekurencyjnie?
Go to the top of the page
+Quote Post
nexis
post
Post #5





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

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


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.


--------------------
Zend Certified Engineer

Kliknij POMÓGŁ jeśli moja odpowiedź okazała się użyteczna!
Go to the top of the page
+Quote Post
abc667
post
Post #6





Grupa: Zarejestrowani
Postów: 229
Pomógł: 0
Dołączył: 29.05.2007

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


efekt jest taki jakiego oczekiwałem czyli że działa bezproblemowo ?
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 04:47