2015-09-29 2 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; 
} 

И, если $ я больше 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

Смежные вопросы