PHP递归函数未返回预期值

PHP递归函数未返回预期值,php,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++;

我有以下代码:

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。。
如何返回这些其他数字?

为了实现递归,您缺少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;
}

为了实现递归,您缺少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;
}

您永远不会捕获递归调用的返回值,因此在顶层,您只会得到第一个调用的返回值。您可能希望改为
$i+=hasMoreParent(…)
。您可以编写@MarcB示例吗?您永远不会捕获递归调用的返回值,因此在顶层,您只能得到第一个调用的返回值。你可能想要
$i+=hasMoreParent(…)
来代替。你能写一个例子@MarcB吗?先生,你刚刚救了我的命!谢谢!没问题!很高兴帮忙:)先生,你刚刚救了我的命!谢谢!没问题!很乐意帮忙:)