最新公告
  • 欢迎您光临002y资源网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • PHP迭代与递归实现无限级分类

    正文概述    2022-06-23   21

    无限级分类是开发中常见的情况,因此本文对常见的无限极分类算法进行总结归纳.

    1.循环迭代实现

    $arr = [
      1=>['id'=>1,'name'=>'父1','father'=>NULL],
      2=>['id'=>2,'name'=>'父2','father'=>NULL],
      3=>['id'=>3,'name'=>'父3','father'=>NULL],
      4=>['id'=>4,'name'=>'儿1-1','father'=>1],
      5=>['id'=>5,'name'=>'儿1-2','father'=>1],
      6=>['id'=>6,'name'=>'儿1-3','father'=>1],
      7=>['id'=>7,'name'=>'儿2-1','father'=>2],
      8=>['id'=>8,'name'=>'儿2-1','father'=>2],
      9=>['id'=>9,'name'=>'儿3-1','father'=>3],
      10=>['id'=>10,'name'=>'儿3-1-1','father'=>9],
      11=>['id'=>11,'name'=>'儿1-1-1','father'=>4],
      12=>['id'=>12,'name'=>'儿2-1-1','father'=>7],
    ];
    function generateTree($items){
      $tree = array();
      foreach($items as $item){
        if(isset($items[$item['father']])){
          $items[$item['father']]['son'][] = &$items[$item['id']]; 
        }else{
          $tree[] = &$items[$item['id']];
        }
      }
      return $tree;
    }
    $tree = generateTree($arr);
    print_r(json_encode($tree));

    输出:

    分析:

    这个算法利用了循环迭代,将线性结构按照父子关系以树形结构输出,算法的关键在于使用了引用.

    优点:速度快,效率高.

    缺点:数组的key值必须与id值相同,不便于取出数据(同样使用迭代获取数据)

    2.递归实现

    $arr = [
      0=>['id'=>1,'name'=>'父1','father'=>0],
      1=>['id'=>2,'name'=>'父2','father'=>0],
      2=>['id'=>3,'name'=>'父3','father'=>0],
      3=>['id'=>4,'name'=>'儿1-1','father'=>1],
      4=>['id'=>5,'name'=>'儿1-2','father'=>1],
      5=>['id'=>6,'name'=>'儿1-3','father'=>1],
      6=>['id'=>7,'name'=>'儿2-1','father'=>2],
      7=>['id'=>8,'name'=>'儿2-1','father'=>2],
      8=>['id'=>9,'name'=>'儿3-1','father'=>3],
      9=>['id'=>10,'name'=>'儿3-1-1','father'=>9],
      10=>['id'=>11,'name'=>'儿1-1-1','father'=>4],
      11=>['id'=>12,'name'=>'儿2-1-1','father'=>7],
    ];
    function generateTree($arr,$id,$step){
      static $tree=[];
      foreach($arr as $key=>$val) {
        if($val['father'] == $id) {
          $flg = str_repeat('└―',$step);
          $val['name'] = $flg.$val['name'];
          $tree[] = $val;
          generateTree($arr , $val['id'] ,$step+1);
        }
      }
      return $tree;
    }
    $tree = generateTree($arr,0,0);
    foreach ($tree as $val){
      echo $val['name'].'<br>';
    }
    

    输出:

    分析:

    利用了递归,数组的key值与id值可以不相同,最后以顺序的结构输出数组

    优点:方便遍历,查找父子元素

    缺点:php不擅长递归,数据量大的情况下效率会显著降低

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


    002y资源网 » PHP迭代与递归实现无限级分类

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    微信支付
    余额支付
    ×
    微信扫码支付 0 元