php递归和迭代的区别

    xiaoxiao2021-04-17  40

    <?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));   ?>  
    转载请注明原文地址: https://ju.6miu.com/read-674074.html

    最新回复(0)