- <?php
- $arr=array(
- array('id'=>1,'name'=>'河南省','pid'=>0),
- array('id'=>2,'name'=>'信阳市','pid'=>1),
- array('id'=>3,'name'=>'开封市','pid'=>1),
- array('id'=>6,'name'=>'广州市','pid'=>4),
- array('id'=>4,'name'=>'广东省','pid'=>0),
- array('id'=>5,'name'=>'深圳市','pid'=>4),
- );
- function digui($data,$pid=0)
- {
- $arr=array();
- foreach($data as $v){
- if($v['pid']==$pid){
- $arr[]=$v;
- $arr=array_merge($arr,digui($data,$v['id']));
- }
- }
- return $arr;
- }
- function diedai($data,$id=0)
- {
- $task=array($id);//任务表此时放进的$id是为了找儿子,然后再儿子中找孙子,
- $tree=array();//地区表
- while(!empty($task))
- {
- $flag=false;
- foreach($data as $k=>$v)
- {
- if($v['pid']==$id)
- {
- $tree[]=$v;//把找到的项放进$tree数组
- array_push($task,$v['id']);//每次把找到的儿子的id加进来
- $id=$v['id'];//每次把$id设成刚加进来的一项的id
- unset($data[$k]);//把找到的项删除,此处类似排除法
- $flag=true;//执行这一步说明上面的$id找到儿子了,如果为false说明这一if语句根本没执行同时说明最后
- //的$id没儿子,然后执行下面的if语句,把$id设为倒数第二项
- }
- }
- if($flag==false)
- {//当执行这一步时 说明上一步的foreach没执行也就是说明$task最后一项没找到孩子
- array_pop($task);//删除最后一项
- $id=end($task);//把$id设为倒数第二项,放到上面的foreach里去执行,找倒数第二项的儿子
- }
- }
- return $tree;
- }
- var_dump(diedai($arr));
- ?>
php递归和迭代的区别
最新推荐文章于 2021-07-24 09:27:29 发布
这篇博客探讨了PHP中递归和迭代两种方法在处理数据结构,特别是整理多级关联数组时的差异。通过示例代码,展示了如何使用递归函数`digui`和迭代函数`diedai`来查找指定父ID的子节点,并形成树状结构。最后,文章通过`var_dump`展示了迭代函数的运行结果。
摘要由CSDN通过智能技术生成