请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

递归返回问题

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没有引用传值


正在回答 回答被采纳积分+3

1回答

Jason 2018-05-11 20:36:24

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

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_其实我还小_0 #1
    ......没懂
    回复 有任何疑惑可以回复我~ 2018-05-12 11:00:20
  • Jason 回复 提问者 qq_其实我还小_0 #2
    递归的确是比较难理解的一部分内容,建议在纸上画个图,每执行一次把函数体的内容写出来,执行到调用自己的部分,再画一个分支出来,最后一个分支执行完毕,再顺着这个分支画回去,其实就是一个变量$data不停的被加工处理,但是因为PHP的数组不是引用,所以并不是修改的同一个变量,而且每执行一次将上次执行加工后的结果继续进行加工,这样得到最终的结果,然后再进行一层层的返回
    回复 有任何疑惑可以回复我~ 2018-05-18 09:31:13
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信