递归的一些例子

简单的demo

  function test($n){
    if($n>0){
    echo $n,",";
    test($n-1);
   echo $n,",";
}
}

test(5);//5,4,3,2,1,1,2,3,4,5,

解读理解

  • 当$n=5开始执行时,最后一行echo始终是挂起的,等到$n=0的时候,才会将挂起的echo一个个输出

关于无限分类的demo

function tree($arr,$pid=0,$level=0){
  static $res=array();
  foreach($arr as $v){
  if($v['pid'] == $pid){
  $v['level'] = $level;
    $res[] = $v;
  tree($arr,$v['id'],$level+1);
}
}
return $res;
}

解读理解

  • 找到pid=0作为当前节点,在来查找子分类时,遍历先挂起,依次逐层这样查找子分类,都将遍历挂起,当所有遍历结束,再无子分类后,就返回到pid=0的节点,这时再将挂起的依次逐层遍历出来

商城中展示商品分类的效果

我们需要将平行的二维数组转成包含关系的多维数组

$cat = array(
 array('cat_id'=>1,'cat_name'=>'服装','pid'=>0),
 array('cat_id'=>2,'cat_name'=>'家用电器','pid'=>0),
 array('cat_id'=>3,'cat_name'=>'男装','pid'=>1),
 array('cat_id'=>4,'cat_name'=>'女装','pid'=>1),
 array('cat_id'=>5,'cat_name'=>'衬衫','pid'=>3),
 array('cat_id'=>6,'cat_name'=>'牛仔裤','pid'=>3),
 array('cat_id'=>7,'cat_name'=>'裙子','pid'=>4),
);

//转成包含关系的多维数组
 $res = array(
 array(
   'cat_id'=>1,
   'cat_name'=>'服装',
   'pid'=>0,
    'child'=>array(
       array(
          'cat_id'=>3,
           'cat_name'=>'男装',
           'pid'=>1,
           'child'=>array(
             array('cat_id'=>5,'cat_name'=>'衬衫','pid'=>3),  
              array('cat_id'=>6,'cat_name'=>'牛仔裤','pid'=>3)
             )
           )
        array(
          'cat_id'=>4,
           'cat_name'=>'女装',
           'pid'=>1,
           'child'=>array(
             array('cat_id'=>7,'cat_name'=>'裙子','pid'=>4),  
            
             )
           )
     )
)

);

因为我们需要这种包含关系的多维数组,所以通过递归来完成

  public function child($arr,$pid=0){
    $res = array();
    foreach($arr as $v){
    if($v['pid'] == $pid){
      $v['child'] = $this->child($arr,$v['cat_id']);
    $res[] = $v;
}

}
return $res;

}

最后在前台页面上输出

foreach($cat as $v)

...
    foreach($v['child'] as $v1)
...
  
    foreach($v1['child'] as $v2)
  
...
  
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 个人学习批处理的初衷来源于实际工作;在某个迭代版本有个BS(安卓手游模拟器)大需求,从而在测试过程中就重复涉及到...
    Luckykailiu阅读 10,263评论 0 11
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,242评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,800评论 19 139
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 14,231评论 2 33
  • 前言: 因在项目中使用到了权限校验的问题,代码中出现了BigInteger的setBit()和testBit()方...
    之乏阅读 5,891评论 0 2