php递归和迭代的区别

  • <?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));
  • ?>
  • (0)

    相关推荐

    • 还在抱怨王者荣耀水晶难抽?PHP一文带你搞懂游戏中的抽奖算法

      一.初始化奖品 id 奖品的id pid 奖品的自定义id type 奖品类型,1.虚拟奖品 2.实物奖品 3.礼包码 待扩充 name 奖品名称 total 奖品总数 chance 获奖概率/抽奖基 ...

    • ecshop2.7.0商品分类显示数量

      修改includes/lib_goods.php,改写下两个函数. /** * 获得指定分类同级的所有分类以及该分类下的子分类 * * @access  public * @param   integ ...

    • PHP中数组的区别

      PHP中数组的区别

    • [PHP] 判断两个数组是否相同

      php中判断两个数组是否相同 , 如果是关联数组 , 可以直接使用==来进行判断 $c=array("a"=>"12"); $d=array(" ...

    • PHP递归与迭代的区别与联系 筋斗云网络

      递归自身调用自身,每一次调用把问题简化,直到问题解决. 迭代:就是指在某个范围内,反复执行相同工作. 递归: 5只猴子,每只猴子,摘1颗桃,完成1步工作 迭代: 1只猴子,这只儿子,摘5颗桃,完成5步 ...

    • PHP递归与迭代

      在 PHP 中,我们经常会遇到这样的情况:在面临一个庞大的问题时,需要把这个庞大的问题拆分成各个细小的单元,解决了每个细小单元的问题,这个庞大的问题便迎刃而解了.递归与迭代就是这种思想的体现. PHP ...

    • Python | 循环与递归的区别

      根据面向对象程序设计的思想,对象包括属性(数据)和方法(操作).其实,递归和循环就相当于两种非常相似的操作,但是它们都有适合自己操作的数据.可以把一个问题看作一个对象,问题由数据(问题没有解决时的状态 ...

    • 儒、释、道三家文化的七大区别

      闲云谷 峰下闲云云上松,珍兰奇蕙伴节丛:不忍移爱进瓦罐,卷书抱坛迁谷中. 994篇原创内容 公众号 一.文化主旨 儒家文化--积极进取的文化 儒家倡导知识的获取和品德的培养,是一种积极向上的文化. 道 ...

    • 招摇撞骗罪和诈骗罪有什么区别

      招摇撞骗罪和诈骗罪都表现为欺骗行为,招摇撞骗罪也可以像诈骗罪一样骗取财物,两者容易混淆,大家知道招摇撞骗罪和诈骗罪有什么区别吗? 律师解答: 招摇撞骗罪侵犯的客体主要是国家机关的威信及其正常活动,而诈 ...

    • 香港服务器托管和租用有什么区别?

      香港服务器托管和租用有什么区别?托管和租用都是服务器选择使用方式,想要知道香港服务器托管和租用两种方式有什么区别以及哪种方式比较好,就需要深入了解它们,下面我们就聊聊香港服务器托管和租用的区别. 什么 ...

    • “全款”和“贷款”买房有什么区别?内行:10年后,差距一目了然

      因为现在国内的房价总体上呈现出不断上涨的趋势,尤其是在一二线城市靠近市中心的房子更是高到令现在的不少家庭都有着很大的生活重担,对于现在的年轻人来说也很难能够在他们的承受范围之内. 所以,如果高房价持续 ...

    • “普通人vs 女网红的区别...” 哈哈哈哈哈哈哈哈哈过于真实!

      网上冲浪久了 不得不感叹 现在的女网红真的很努力 为了拍出 前凸后翘的照片 不管何时何地 都执着地凹着浮夸的摆拍造型 网友甚至总结出了当网红的精髓 普通人vs 女网红的区别 学废了 离网红就差一个骨盆 ...