递归的一些例子

简单的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)
  
...
  

你可能感兴趣的:(递归的一些例子)