PHP实现无限极分类生成分类树的方法

 更新时间:2017年09月11日 10:21:54   作者:红尘困住年少  
这篇文章主要介绍了PHP实现无限极分类生成分类树的方法,结合实例形式简单分析了无限极分类的原理与实现方法,涉及PHP数组遍历与判断相关操作技巧,需要的朋友可以参考下

本文实例讲述了PHP实现无限极分类生成分类树的方法。分享给大家供大家参考,具体如下:

现在的分类数据库设计基本都是:每一个分类有一个id主键字段,一个pid指向父类的id,这样便可实现无限级分类,取出的数据就是如下的格式:

$arr = array(
  array("id" => 1 , "pid" => 0 , 'cat' => '栏目一'),
  array("id" => 2 , "pid" => 0 , 'cat' => '栏目二'),
  array("id" => 3 , "pid" => 1 , 'cat' => '栏目三'),
  array("id" => 4 , "pid" => 2 , 'cat' => '栏目四'),
  array("id" => 5 , "pid" => 1 , 'cat' => '栏目五'),
  array("id" => 6 , "pid" => 5 , 'cat' => '栏目六'),
  array("id" => 7 , "pid" => 5 , 'cat' => '栏目七'),
  array("id" => 8 , "pid" => 6 , 'cat' => '栏目八'),
  array("id" => 9 , "pid" => 1 , 'cat' => '栏目九'),
  array("id" => 10 , "pid" => 0 , 'cat' => '栏目十'),
  array("id" => 11 , "pid" => 10 , 'cat' => '栏目十一'),
  array("id" => 12 , "pid" => 11 , 'cat' => '栏目十二'),
  array("id" => 13 , "pid" => 2 , 'cat' => '栏目十三'),
  array("id" => 14, "pid" => 13 , 'cat' => '栏目十四')
);

不多说,直接上处理代码:

//生成无限极分类树
function make_tree($arr){
  $refer = array();
  $tree = array();
  foreach($arr as $k => $v){
    $refer[$v['id']] = & $arr[$k]; //创建主键的数组引用
  }
  foreach($arr as $k => $v){
    $pid = $v['pid'];  //获取当前分类的父级id
    if($pid == 0){
      $tree[] = & $arr[$k];  //顶级栏目
    }else{
      if(isset($refer[$pid])){
        $refer[$pid]['subcat'][] = & $arr[$k]; //如果存在父级栏目,则添加进父级栏目的子栏目数组中
      }
    }
  }
  return $tree;
}

测试运行:

$cat = make_tree($arr);
print_r($cat);

运行结果:

Array
(
  [0] => Array
    (
      [id] => 1
      [pid] => 0
      [cat] => 栏目一
      [subcat] => Array
        (
          [0] => Array
            (
              [id] => 3
              [pid] => 1
              [cat] => 栏目三
            )
          [1] => Array
            (
              [id] => 5
              [pid] => 1
              [cat] => 栏目五
              [subcat] => Array
                (
                  [0] => Array
                    (
                      [id] => 6
                      [pid] => 5
                      [cat] => 栏目六
                      [subcat] => Array
                        (
                          [0] => Array
                            (
                              [id] => 8
                              [pid] => 6
                              [cat] => 栏目八
                            )
                        )
                    )
                  [1] => Array
                    (
                      [id] => 7
                      [pid] => 5
                      [cat] => 栏目七
                    )
                )
            )
          [2] => Array
            (
              [id] => 9
              [pid] => 1
              [cat] => 栏目九
            )
        )
    )
  [1] => Array
    (
      [id] => 2
      [pid] => 0
      [cat] => 栏目二
      [subcat] => Array
        (
          [0] => Array
            (
              [id] => 4
              [pid] => 2
              [cat] => 栏目四
            )
          [1] => Array
            (
              [id] => 13
              [pid] => 2
              [cat] => 栏目十三
              [subcat] => Array
                (
                  [0] => Array
                    (
                      [id] => 14
                      [pid] => 13
                      [cat] => 栏目十四
                    )
                )
            )
        )
    )
  [2] => Array
    (
      [id] => 10
      [pid] => 0
      [cat] => 栏目十
      [subcat] => Array
        (
          [0] => Array
            (
              [id] => 11
              [pid] => 10
              [cat] => 栏目十一
              [subcat] => Array
                (
                  [0] => Array
                    (
                      [id] => 12
                      [pid] => 11
                      [cat] => 栏目十二
                    )
                )
            )
        )
    )
)

如果大家需要这样的组装格式,或者需要该格式方便后续的处理,可以尝试此方法

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP常用遍历算法与技巧总结》、《PHP数学运算技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

相关文章

  • php 服务器调试 Zend Debugger 的安装教程

    php 服务器调试 Zend Debugger 的安装教程

    调试技术是我们编程中不可或缺的重要部分,调试器是每个IDE环境都必备的组件。既然如此,Zend Studio的集成环境拥有一个调试器也就是理所当然的事情了,但是,该调试器在配置使用起来,其显示出来的强劲功能一定会让你惊叹不已!
    2009-09-09
  • php实现cookie加密的方法

    php实现cookie加密的方法

    这篇文章主要介绍了php实现cookie加密的方法,涉及php操作cookie的加密、解密及设置等技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • PHP MySQL应用中使用XOR运算加密算法分享

    PHP MySQL应用中使用XOR运算加密算法分享

    本文将介绍一个简单易用的加密/解密算法:使用异或(XOR)运算。本算法原理简单,旨在使读者对信息的加密/解密有一个更加直观的印象。
    2011-08-08
  • php基于curl主动推送最新内容给百度收录的方法

    php基于curl主动推送最新内容给百度收录的方法

    这篇文章主要介绍了php基于curl主动推送最新内容给百度收录的方法,分析了百度链接的提交方式及curl主动推送的实现方法,需要的朋友可以参考下
    2016-10-10
  • php使用Jpgraph创建3D饼形图效果示例

    php使用Jpgraph创建3D饼形图效果示例

    这篇文章主要介绍了php使用Jpgraph创建3D饼形图效果,结合实例形式分析了php基于Jpgraph绘制图形的原理、实现步骤与相关操作技巧,需要的朋友可以参考下
    2017-02-02
  • PHP获取链表中倒数第K个节点的方法

    PHP获取链表中倒数第K个节点的方法

    这篇文章主要介绍了PHP获取链表中倒数第K个节点的方法,涉及php针对链表的遍历、判断等相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • 一些php技巧与注意事项分析

    一些php技巧与注意事项分析

    很多人写程序时,用 header(location) 进行跳转往往不记得写 exit() 语句,事实上这种做法是存在严重风险的。
    2011-02-02
  • php使用环形链表解决约瑟夫问题完整示例

    php使用环形链表解决约瑟夫问题完整示例

    这篇文章主要介绍了php使用环形链表解决约瑟夫问题,简单描述了约瑟夫问题并结合实例形式分析了php基于环形链表解决约瑟夫问题的相关操作技巧,注释中包含较为详尽的说明便于理解,需要的朋友可以参考下
    2018-08-08
  • linux php mysql数据库备份实现代码

    linux php mysql数据库备份实现代码

    想在PHP后台管理直接能够备份数据库,于是想呀想,一直没有什么思路,一开始是考虑用php来访问服务器安装mysql的目录,比如 /usr/local/mysql/data目录,直接把下面对应的文件进行备份
    2009-03-03
  • 通过PHP实现获取访问用户IP

    通过PHP实现获取访问用户IP

    这篇文章主要介绍了通过PHP实现获取访问用户IP,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05

最新评论