Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Rekurencja i zwracanie wartości
Forum PHP.pl > Forum > PHP
tyrael
Na wstępie witam wszystkich.

tabela 'kategorie'

id_kat
id_matki
nazwa

1 | 0 | kategoria A
2 | 1 | kategoria B
3 | 2 | kategoria C

kategoria A
--- kategoria B
--- --- kategoria C

Wchodzę do "kategorii C" z id_kat "3" i chcę otrzymać id_kat ( lub nazwę kat ) najwyższego poziomu

  1. function kategoria_glowna( $id_kat )
  2. {
  3. $zapytanie = "SELECT * FROM kategorie WHERE id_kat='$id_kat' ";
  4. $wynik = mysql_query( $zapytanie );
  5. $row = mysql_fetch_array( $wynik );
  6.  
  7. // jeśli nie jest to kategoria główna to wejście w rekurencje
  8.  
  9. if ( $row['id_matki'] != 0 )
  10. {
  11. kategoria_glowna( $row['id_matki'] );
  12. }
  13. else
  14. {
  15. return $row['id_kat'];
  16. }
  17. }

Niestety nie zwraca "id_kat" najwyższego poziomu. Jeśli zastąpimy "return" funkcją "echo" to wtedy pokazuje poprawnie ale return nie zwraca wartości.
Rozwiązanie działające, które znalazłem jest poniżej. Pytanie czy jest jakaś inna metoda?
  1. function kategoria_glowna( $id_kat )
  2. {
  3. $zapytanie = "SELECT * FROM kategorie WHERE id_kat='$id_kat' ";
  4. $wynik = mysql_query( $zapytanie );
  5. $row = mysql_fetch_array( $wynik );
  6.  
  7. $path = array();
  8. static $path;
  9.  
  10. // jeśli nie jest to kategoria główna to wejście w rekurencje
  11.  
  12. if ( $row['id_matki'] != 0 )
  13. {
  14. kategoria_glowna( $row['id_matki'] );
  15. }
  16.  
  17. $path[] = $row['id_kat'];
  18. return $path[0] ;
  19. }
karolrynio
  1.  
  2. if ( $row['id_matki'] != 0 )
  3. {
  4. return kategoria_glowna( $row['id_matki'] );
  5. }
  6.  
tyrael
Dzięki.
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.