Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MySQL] Wartość z funkcji rekurencyjnej do tablicy.
RONINZGR
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 13.02.2013

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


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...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 13.02.2013

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


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

Ten post edytował RONINZGR 13.02.2013, 09:58:40
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




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





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 13.02.2013

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


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 (IMG:style_emoticons/default/smile.gif)

Ten post edytował RONINZGR 13.02.2013, 16:07:11
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 2.10.2025 - 17:46