Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Funkcja rekurencyjna problem z return, zwraca null
popson
post 27.03.2013, 08:53:57
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 25.11.2011

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


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
Go to the top of the page
+Quote Post
irmidjusz
post 27.03.2013, 22:53:49
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

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


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.


--------------------
there is much to be learned
Go to the top of the page
+Quote Post
popson
post 28.03.2013, 14:39:41
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 25.11.2011

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


Dzięki za pomoc!
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 18.04.2024 - 05:00