Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL] Wartość z funkcji rekurencyjnej do tablicy.
Forum PHP.pl > Forum > Przedszkole
RONINZGR
Nie sądziłem że to taki problem będzie.

Jestem wielkim miłośnikiem tablic i używam ich zawsze kiedy tylko się da bo mają praktycznie nieograniczone możliwości jeżeli chodzi o zarządzanie danymi.
Rzadko również korzystam z rekurencji ze względów wydajnościowych ale czasem jest taka konieczność. Potrzebuję upakować kolejne kroki w hierarchii odnośników do tablicy podczas wykonywania rekurencji. Nie wiem, czy robię coś źle że nie mogę takiej tablicy utworzyć. Podaje kod.

  1. function createMenu($pozycja, $tablica=array()) {
  2.  
  3. $setPobranieDanych = mysql_query("SELECT * FROM Kategorie WHERE id_kategorii = '".$pozycja."'");
  4. $setPobranieDanychCount = mysql_num_rows($setPobranieDanych);
  5. $getPobranieDanych = mysql_fetch_assoc($setPobranieDanych);
  6.  
  7. if ($setPobranieDanychCount <> 0) {
  8.  
  9. $tablica[] = $getPobranieDanych['nazwa_kategorii'];
  10.  
  11. createMenu($getPobranieDanych['id_rodzic'], $tablica);
  12.  
  13. } else {
  14.  
  15. $tablica[] = 'Home';
  16.  
  17. return($tablica); // tablica pokazuje bzdury
  18.  
  19. print_r($tablica); // funkcja pokazuje że tablica istnieje ale 'widoczna' jest tylko w niej
  20.  
  21. }
  22.  
  23. }


Jak widać nie jest żaden skomplikowany kod. Prosty do bólu a jednak tablica nie tworzy się.
Wywołanie funkcji z echo zamiast przypisania do tablicy działa poprawnie.
Wywołanie print_r pokazuje, że tablica istnieje jednak nie ma do niej żadnego dostępu.

Nie wiem dlaczego to jest takie problematyczne...
nospor
Może przydałaby się odrobina podstaw?

robisz print_r po return a przecież po return nic już nie jest wykonywane....

skoro createMenu zwraca tablice, to wypadałoby ją odebrać.....

nie: createMenu($getPobranieDanych['id_rodzic'], $tablica);
a: $tablica = createMenu($getPobranieDanych['id_rodzic'], $tablica);

Pomijam już fakt, ze stosowanie zapytań w rekurencji to najgorsze z najgorszych rozwiązań.
RONINZGR
print_r znalazł się przykładowo. Źle to może opisałem przedstawiłem ale chodziło mi, że zamiast return($tablica). (wiem że po return kod nie jest już wywoływany)

Zapytania wiem że nie są optymalne. To prototypowy kod. Docelowo będę pobierał wszystko do tablicy i dopiero korzystał z rekurencji.

Dzięki. Podstawowy błąd - nie dopaczenie. Sprawdzę...
nospor
Pozatym masz niesamowity błąd koncepcyjny....
Zawsze pobierasz tylko jeden rekord - źle.

do funkcji masz przekazywać id_rodzic a w funkcji masz pobierac w petli wszystkie dzieci tego rodzica. w tej samej pętli dla danego dziecka masz wykonac znowu rekurencyjnie te funkcje, z tym ze teraz jako id_rodzic masz przekazac id wlasnie przetwarzanego dziecka.
RONINZGR
Cytat(nospor @ 13.02.2013, 10:08:52 ) *
Pozatym masz niesamowity błąd koncepcyjny....
Zawsze pobierasz tylko jeden rekord - źle.

do funkcji masz przekazywać id_rodzic a w funkcji masz pobierac w petli wszystkie dzieci tego rodzica. w tej samej pętli dla danego dziecka masz wykonac znowu rekurencyjnie te funkcje, z tym ze teraz jako id_rodzic masz przekazac id wlasnie przetwarzanego dziecka.


To tylko belka aktualnej pozycji a nie całe menu smile.gif
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.