2015-09-29 70 views
1

我有以下代碼:PHP遞歸函數沒有返回預期

use app\models\Kategorije; 

function hasMoreParent($id,$i = 0){ 
    $model = new Kategorije(); 
    $parent_id = $model::find()->where('id = :id',[':id' => $id])->one()->parent_id; 
    if ($parent_id > 1) { 
     $i++; 
     hasMoreParent($parent_id,$i); 
    } 
     return $i; 
} 

而且,當$ i大於0,它總是返回1而不是2或3 .. 我怎樣才能使它返回那些其他數字?

+0

你永遠不會捕獲遞歸調用的返回值,所以在頂層,你只會得到返回的FIRST調用的值。你可能需要'$ i + = hasMoreParent(...)'。 –

+0

你能寫出例子@MarcB嗎? – user3002173

回答

0

您錯過了return關鍵字以實現遞歸,否則函數hasMoreParent將被執行,但流程將繼續併到達return $i;語句。

use app\models\Kategorije; 

function hasMoreParent($id, $i = 0) { 
    $model = new Kategorije(); 
    $parent_id = $model::find()->where('id = :id', [':id' = > $id])->one()->parent_id; 
    if ($parent_id > 1) { 
     $i++; 
     return hasMoreParent($parent_id, $i); 
    } 
    return $i; 
} 
+0

你,先生,剛剛救了我的命!非常感謝! – user3002173

+0

沒問題!樂意效勞 :) – taxicala