php递归函数中使用return的时候会碰到无法正确返回想要的值得情况,如果不明白其中的原因,很难找出错误的,就下面的具体例子来说明一下吧:
复制代码 代码如下:

function test($i){
$i-=4;
if($i<3){
return $i;
}else{
test($i); //递归函数
}
}
echotest(30);

这段代码看起来没有问题,如果不运行一下估计你也不会认为他有什么问题,及时运行起来发现有问题你也不一定知道哪里有问题,但其实这个函数的else里面是有问题的。在这段代码里面执行的结果是没有返回值的。所以虽然满足条件 $i 复制代码 代码如下:

function test($i){
$i-=4;
if($i<3){
return $i;
}else{
return test($i);//增加return,让函数返回值
}
}
echotest(30);

 

要加两个return 1、返回值 2、返回递归函数 我做的无限极分类导航读取是这样实现的

public function checkparentnav($id,$uid,$k,$arr){ //分配无限极父级导航 $k计数器
             $nowpath = $this->find($id); //当前目录信息arr
             if($nowpath['uid'] == $uid){
                 $arr[$k]['id'] = $nowpath['id'];
                 $arr[$k]['name'] = $nowpath['name'];
                if($nowpath['pid'] != 1){ //非顶级目录继续查询
                    return $this->checkparentnav($nowpath['pid'],$uid,++$k,&$arr); //自调用
                }else{
                    return $arr;
                }

            }else{
                //用户权限非法操作
            }
        }