php递归函数返回值返回不出的问题

简介: php递归函数返回值返回不出的问题

今天上班用到了递归函数求分类最上级,代码如下

1

2

3

4

5

6

7

8

9

10

11

12

13

//分类递归查找上级分类

functionget_cat_pid($cat_id,$data){

    $sql"select cat_id,cat_name,parent_id  from ".$GLOBALS['hhs']->table('category')." where cat_id= ".$cat_id;

    $pid$GLOBALS['db']->getRow($sql);

   $data[]=$pid;

    if($pid['parent_id']!=0){

        get_cat_pid($pid['parent_id'],$data);

         return;

    }else{

        var_dump($data);

        return$data;

    }

}

控制器代码如下

1

var_dump(get_cat_pid($cat_parent_id,array()));

发现无论如何,函数的打印结果是正确的,到return的时候只能打印一个null,一直改都没法解决

后来想到了存session,存session的确解决了,但感觉非常不好

直到我度娘到了&$这个东西,

百度一下释义,说是引用变量

$b=&$a时,当$a变了$b值也会变,$b值变了$a也会变,所以经过改进

1

2

3

4

5

6

7

8

9

10

11

12

//分类递归查找上级分类

functionget_cat_pid($cat_id,&$data){

    $sql"select cat_id,cat_name,parent_id  from ".$GLOBALS['hhs']->table('category')." where cat_id= ".$cat_id;

    $pid$GLOBALS['db']->getRow($sql);

   $data[]=$pid;

    if($pid['parent_id']!=0){

        get_cat_pid($pid['parent_id'],$data);

        return;

    }else{

        return;

    }

}

1

2

get_cat_pid($cat_parent_id,$a);

  var_dump($a);

解决了递归函数传值不出的问题,但我至今还不知道为什么return不出值.....

经过了大神的教诲,现在终于明白为什么会返回null了

函数的return是返回给调用这个函数的值,当循环两次值为0时,会返回给循环第一次的本身函数,然后再返回给调用函数的...

大神原话

image.png

这样我懂了两个知识点:

1,函数不管是if还是else都得写个return;

2,加强基础啊!!!!

顺便把前面没有return的地方改下


目录
相关文章
|
4月前
|
算法 小程序 PHP
PHP实现递归排序
在leetcode练习算法的时候,发现一个算法需要用到递归。 递归是个好东西,但是吧,一般不理解其精髓的,很难写出一个好的递归。 递归其实就是函数本身直接或者间接地调用自身的一种编程方法(我自己调用我自己~),也可以理解为有反复执行过程的一种方法,这个就与循环非常相似,但是递归调用的函数中必须要有终止条件,也就是一定
28 1
|
10月前
|
PHP
PHP递归和循环的速度测试
写了一个可以对 $_GET`, `$_POST 等输入进行过滤的函数,做了PHP递归和循环的速度测试。
55 0
|
Web App开发 Rust 安全
解雇拒绝打开摄像头员工被罚 51 万;推送损坏的更新,导致数千网站瘫痪;PHP 存在不受控制的递归漏洞|思否周刊
解雇拒绝打开摄像头员工被罚 51 万;推送损坏的更新,导致数千网站瘫痪;PHP 存在不受控制的递归漏洞|思否周刊
|
Java PHP
关于php递归函数内存溢出的问题
关于php递归函数内存溢出的问题
99 1
关于php递归函数内存溢出的问题
|
存储 PHP 块存储
php-递归
php-递归
83 0
PHP:二维数组查找元素值并且返回下标
PHP:二维数组查找元素值并且返回下标
150 0
为啥PHP in_array(0,['a', 'b', 'c']) 返回为true?
在具体PHP编码过程中,总会出现一些我们认为不可能的情况,如下几例
|
PHP
【PHP】递归时把数据存到数组里(防止被覆盖)
【PHP】递归时把数据存到数组里(防止被覆盖)
82 0
【PHP】递归时把数据存到数组里(防止被覆盖)