php递归和迭代的区别

这篇博客探讨了PHP中递归和迭代两种方法在处理数据结构,特别是整理多级关联数组时的差异。通过示例代码,展示了如何使用递归函数`digui`和迭代函数`diedai`来查找指定父ID的子节点,并形成树状结构。最后,文章通过`var_dump`展示了迭代函数的运行结果。
摘要由CSDN通过智能技术生成
  1. <?php  
  2. $arr=array(  
  3. array('id'=>1,'name'=>'河南省','pid'=>0),  
  4. array('id'=>2,'name'=>'信阳市','pid'=>1),  
  5. array('id'=>3,'name'=>'开封市','pid'=>1),  
  6. array('id'=>6,'name'=>'广州市','pid'=>4),  
  7. array('id'=>4,'name'=>'广东省','pid'=>0),  
  8. array('id'=>5,'name'=>'深圳市','pid'=>4),  
  9. );  
  10. function digui($data,$pid=0)  
  11. {  
  12.     $arr=array();  
  13.     foreach($data as $v){  
  14.         if($v['pid']==$pid){  
  15.             $arr[]=$v;  
  16.             $arr=array_merge($arr,digui($data,$v['id']));  
  17.         }  
  18.     }  
  19.     return $arr;  
  20. }  
  21. function  diedai($data,$id=0)  
  22. {  
  23.      $task=array($id);//任务表此时放进的$id是为了找儿子,然后再儿子中找孙子,  
  24.      $tree=array();//地区表  
  25.     while(!empty($task))  
  26.     {  
  27.         $flag=false;  
  28.         foreach($data as $k=>$v)  
  29.         {  
  30.             if($v['pid']==$id)  
  31.             {  
  32.                 $tree[]=$v;//把找到的项放进$tree数组  
  33.                 array_push($task,$v['id']);//每次把找到的儿子的id加进来  
  34.                 $id=$v['id'];//每次把$id设成刚加进来的一项的id  
  35.                 unset($data[$k]);//把找到的项删除,此处类似排除法  
  36.                 $flag=true;//执行这一步说明上面的$id找到儿子了,如果为false说明这一if语句根本没执行同时说明最后  
  37.                 //的$id没儿子,然后执行下面的if语句,把$id设为倒数第二项  
  38.             }  
  39.         }  
  40.         if($flag==false)  
  41.         {//当执行这一步时 说明上一步的foreach没执行也就是说明$task最后一项没找到孩子  
  42.             array_pop($task);//删除最后一项  
  43.             $id=end($task);//把$id设为倒数第二项,放到上面的foreach里去执行,找倒数第二项的儿子  
  44.         }  
  45.   
  46.     }  
  47.     return $tree;  
  48. }  
  49. var_dump(diedai($arr));  
  50. ?>  

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值