2013-10-29 136 views
-1

我有一個methos遞歸問題返回null

private function test($testArray = array(),$i=0){ 
     $i++; 
     $testArray = array_merge($testArray, array($i)); 
     if($i < 10){ 
      $this->test($testArray, $i); //recursion 
     }else{ 
      return $testArray; 
     } 
    } 

當我這樣稱呼它$x = $this->test(array(), 0);從另一種方法,是假設作出的$ I數組,然後返回數組時$ i達到10.問題是它返回null 有趣的是,當我做var_dump時,我在返回之前獲取數組。這裏是我在調試代碼

private function test($testArray = array(),$i=0){ 
    $i++; 
    $testArray = array_merge($testArray, array($i)); 
    var_dump($i); 
    if($i < 10){ 
     var_dump("Continued to $i"); 
     $this->test($testArray, $i); 
    }else{ 
     var_dump("Closing on $i"); 
     var_dump($testArray); 
     return $testArray; 
    } 
} 

,這裏是

int 1 
string 'Continued to 1' (length=14) 
int 2 
string 'Continued to 2' (length=14) 
int 3 
string 'Continued to 3' (length=14) 
int 4 
string 'Continued to 4' (length=14) 
int 5 
string 'Continued to 5' (length=14) 
int 6 
string 'Continued to 6' (length=14) 
int 7 
string 'Continued to 7' (length=14) 
int 8 
string 'Continued to 8' (length=14) 
int 9 
string 'Continued to 9' (length=14) 
int 10 
string 'Closing on 10' (length=13) 
array (size=10) 
    0 => int 1 
    1 => int 2 
    2 => int 3 
    3 => int 4 
    4 => int 5 
    5 => int 6 
    6 => int 7 
    7 => int 8 
    8 => int 9 
    9 => int 10 
null 

這是殺害我的任何幫助將感激

+2

如果'if'語句爲true,那麼你的代碼實際上並沒有返回任何東西 - 它只在返回一個變量時才返回。 – andrewsi

+0

你是什麼意思?它應該返回數組 – Autolycus

+0

得到它..tahnks – Autolycus

回答

1

我認爲,一個簡單的變化,使輸出如下:

private function test($testArray = array(),$i=0){ 
    $i++; 
    $testArray = array_merge($testArray, array($i)); 
    if($i < 10){ 
     return $this->test($testArray, $i); //recursion 
    }else{ 
     return $testArray; 
    } 
} 
1

你實際上並沒有返回任何結果。 if語句每次都會評估爲true,並自行調用函數。當他們都終於完成時,返回語句從未被實際調用過。