Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Rekurencyjna funkcja pobierająca drzewo
Forum PHP.pl > Forum > Przedszkole
Gość
Witam, muszę napisać funkcję rekurencyjną która pobierze mi całe drzewo kategorii z bazy. Napisałem, ale działa źle tzn. podkategorie pojawiają się tam gdzie nie powinny sad.gif Może mi ktoś pokazać jak powinna wyglądać taka funkcja? W bazie mam pola: id, parent_id i name.

Dziękuję
Black-Berry
  1. <?php
  2. // $parent is the parent of the children we want to see
  3. // $level is increased when we go deeper into the tree,
  4. //        used to display a nice indented tree
  5. function display_children($parent, $level) {
  6.   // retrieve all children of $parent
  7.   $result = mysql_query('SELECT title FROM tree '.
  8.                          'WHERE parent="'.$parent.'";');
  9.  
  10.   // display each child
  11.   while ($row = mysql_fetch_array($result)) {
  12.       // indent and display the title of this child
  13.       echo str_repeat('  ',$level).$row['title']."\n";
  14.  
  15.       // call this function again to display this
  16.       // child's children
  17.       display_children($row['title'], $level+1);
  18.   }
  19. }
  20. ?>
Czadus
Witam. Korzystając z okazji, aby nie zakładać nowego tematu, zapytam odnośnie ryzyka wykorzystywania funkcji rekurencyjnych w php. Czytałem bowiem w internecie następujące zdanie: "Należy jednak unikać rekurencyjnych wywołań funkcji lub metod o głębokości większej niż 100-200 poziomów, gdyż może to zniszczyć stos i spowodować przerwanie działania skryptu.". I moje pytanie na ile jest to niebezpieczne i na ile poważne. bardziej chodzi mi o to, czy trzeba do tego poważnie podejść, czy może poprawność działania kodu jest mimo wszystko bezpieczna??
Black-Berry
funkcje rekurencyjne wogóle nie powinny być nigdzie stosowane. Świadczą o lenistwie programisty. Każdą funkcję rekurencyjną można przerobić na nie-rekurencyjną.
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.