递归返回问题

来源:9-2 web资源防盗链

qq_其实我还小_0

2018-05-07

public function statisDepostieAction($dbu_id,$ag_id_arr,$data=array()){
   //查询下级信息
   $list  = $this->getDataList($dbu_id,$ag_id_arr);
   if(!empty($list)){
       $ag_ids = array();
       foreach ($list as $v){
           $data[$v['ag_fid']][$v['ag_id']] = $v;
           $ag_ids[] = $v['ag_id'];
       }
       $this->statisDepostieAction($dbu_id,$ag_ids,$data);
   }else{

   var_dump($data);      

   return $data;
   }
}

刚开始时候没有return 发现打印data值是正常的,但retun接收的值就不对,在调用递归时候加上return都正常了,请问是怎么回事?感觉每次递归最后不满足条件不就直接返回值了?还是因为data没有引用传值


写回答

1回答

Jason

2018-05-11

是这样,你原先有一个数组$data,是空数组,处理完后的结果插入到了这个数组当中,然后又调用本方法,并且把处理后的$data数组接着传进去,这就是说你在不断的累加$data,直到最后一次执行结束,返回$data,然后将这个结果一层一层地返回回到第一次调用时,这样就可以获取到最终的$data

0
2
Jason
回复
qq_其实我还小_0
递归的确是比较难理解的一部分内容,建议在纸上画个图,每执行一次把函数体的内容写出来,执行到调用自己的部分,再画一个分支出来,最后一个分支执行完毕,再顺着这个分支画回去,其实就是一个变量$data不停的被加工处理,但是因为PHP的数组不是引用,所以并不是修改的同一个变量,而且每执行一次将上次执行加工后的结果继续进行加工,这样得到最终的结果,然后再进行一层层的返回
2018-05-18
共2条回复

360大牛带你横扫PHP职场 全面解读PHP面试

全面、系统剖析PHP面试,拿下心仪Offer

1817 学习 · 464 问题

查看课程