Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Funkcja rekurencyjna problem z return
Forum PHP.pl > Forum > Przedszkole
popson
Witam,
Mam funkcję do budowania ścieżek dla katalogów na podstawie bazy.

  1. foreach($allDirs as $ad){
  2. if($ad->root == 1){
  3. array_push($res, $ad->name); //jeśli katalog jest rootem bo dodajemy do tablicy
  4. }else{
  5. $p = $this->bulidPath($ad,null); // jeśli nie to budujemy dla niego ścieżkę (null oznacza że początkowa ścieżka jest pusta)
  6. array_push($res,$p);
  7. }
  8. }

gdzie lecę po każdym katalogu i jeśli jest rootem to wrzucamy do tablicy, jeśli nie to wywyołujemy funkcję rekurencyjną która ma nam zbudować ścieżkę do tego katalogu.

  1. public function bulidPath($dir, $path){
  2. $parent = $this->getParent($dir); //sprawdzam czy katalog ma jakiś nadrzędny nad sobą
  3. if($parent){
  4. if($path !== null){ //jeśli tak i ścieżka nie jest pusta do doklejamy nazwę katalogu dościeżki i idziemy dalej
  5. $path = $dir->name.'/'.$path;
  6. $this->bulidPath($parent, $path);
  7. }else{ //jeśli tak to przypisujemy do ściezki nazwę katalogu
  8. $path = $dir->name;
  9. $this->bulidPath($parent, $path);
  10. }
  11. }else{ // jeśli katalog nie ma katalogu nadrzędnego oznacza to, że doszliśmy do roota więc zwracamy ścieżkę.
  12. $path = $dir->name.'/'.$path;
  13. return $path;
  14. }
  15. }

No i jak funkcja rekurencyjna kilka razy się wywoła to ładnie skleja mi ścieżkę. Natomiast jak następuje return to przy printowaniu $p ciągle jest null (przed returnem echo $path pokazuje całą ścieżkę a już przy echo $p jest null). Proszę o wskazówkę, bądź rozwiązanie.

Pozdrawiam!
Piotrek

Może chociaż pół wskazówki questionmark.gif biggrin.gif
irmidjusz
Przecież w tej funkcji buildPath masz dwa wywołania $this->buildPath i one muszą zwracać wartość - daj przed nimi return. Ewentualnie coś innego (w innej linii) zwracaj (nie będę tego analizował) - tak, aby było poprawnie.
popson
Dzięki za pomoc!
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.