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{
//用户权限非法操作
}
}