PHP超牛逼无限极分类生成树方法


Posted in PHP onMay 11, 2015

你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了。

这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了。

function generateTree($items){

    $tree = array();

    foreach($items as $item){

        if(isset($items[$item['pid']])){

            $items[$item['pid']]['son'][] = &$items[$item['id']];

        }else{

            $tree[] = &$items[$item['id']];

        }

    }

    return $tree;

}

$items = array(

    1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),

    2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),

    3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),

    4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县'),

    5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'),

);

print_r(generateTree($items));

可以看到下面打印的结果:

Array

(

    [0] => Array

        (

            [id] => 1

            [pid] => 0

            [name] => 安徽省

            [son] => Array

                (

                    [0] => Array

                        (

                            [id] => 3

                            [pid] => 1

                            [name] => 合肥市

                            [son] => Array

                                (

                                    [0] => Array

                                        (

                                            [id] => 4

                                            [pid] => 3

                                            [name] => 长丰县

                                        )

 

                                )

 

                        )

 

                    [1] => Array

                        (

                            [id] => 5

                            [pid] => 1

                            [name] => 安庆市

                        )

 

                )

 

        )

 

    [1] => Array

        (

            [id] => 2

            [pid] => 0

            [name] => 浙江省

        )

 

)

上面生成树方法还可以精简到5行:
function generateTree($items){

    foreach($items as $item)

        $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];

    return isset($items[0]['son']) ? $items[0]['son'] : array();

}

上面这种无限极分类数据树形结构化的方法值得借鉴。但是我觉得这段代码实际用途并不明显啊,你想取出格式化的树形数据还是要递归啊:

/**

 * 如何取数据格式化的树形数据

 */

$tree = generateTree($items);

function getTreeData($tree){

    foreach($tree as $t){

        echo $t['name'].'<br>';

        if(isset($t['son'])){

            getTreeData($t['son']);

        }

    }

}

getTreeData($tree);
PHP 相关文章推荐
example1.php
Oct 09 PHP
可定制的PHP缩略图生成程式(需要GD库支持)
Mar 06 PHP
兼容性比较好的PHP生成缩略图的代码
Jan 12 PHP
允许phpmyadmin空密码登录的配置方法
May 29 PHP
深入extjs与php参数交互的详解
Jun 25 PHP
PHP网站开发中常用的8个小技巧
Feb 13 PHP
PHP两种快速排序算法实例
Feb 15 PHP
如何使用Gitblog和Markdown建自己的博客
Jul 31 PHP
WordPress中创建用户角色的相关PHP函数使用详解
Dec 25 PHP
PHP实现的oracle分页函数实例
Jan 25 PHP
PHP远程连接oracle数据库操作实现方法图文详解
Apr 11 PHP
基于thinkphp6.0的success、error实现方法
Nov 05 PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
May 11 #PHP
PHP获取当前日期和时间及格式化方法参数
May 11 #PHP
PHP借助phpmailer发送邮件
May 11 #PHP
PHP date函数常用时间处理方法
May 11 #PHP
护卫神php套件 php版本升级方法(php5.5.24)
May 10 #PHP
php.ini中的request_order推荐设置
May 10 #PHP
浅析iis7.5安装配置php环境
May 10 #PHP
You might like
用PHP实现小型站点广告管理
2006/10/09 PHP
php下实现农历日历的代码
2007/03/07 PHP
php 归并排序 数组交集
2011/05/10 PHP
win7+apache+php+mysql环境配置操作详解
2013/06/10 PHP
php $_SERVER windows系统与linux系统下的区别说明
2014/02/14 PHP
phpinfo的知识点总结
2019/10/10 PHP
枚举JavaScript对象的函数
2006/12/22 Javascript
用jQuery技术实现Tab页界面之二
2009/09/21 Javascript
深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
2015/03/05 Javascript
js代码验证手机号码和电话号码是否合法
2015/07/30 Javascript
javascript运动框架用法实例分析(实现放大与缩小效果)
2016/01/08 Javascript
JS中改变this指向的方法(call和apply、bind)
2016/03/26 Javascript
JS Attribute属性操作详解
2016/05/19 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
AngularJS基于factory创建自定义服务的方法详解
2017/05/25 Javascript
Vue中Quill富文本编辑器的使用教程
2018/09/21 Javascript
微信小程序使用echarts获取数据并生成折线图
2019/10/16 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
用Python编写简单的微博爬虫
2016/03/04 Python
python虚拟环境virtualenv的使用教程
2017/10/20 Python
Python 绘制酷炫的三维图步骤详解
2019/07/12 Python
python的slice notation的特殊用法详解
2019/12/27 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
python 实现简单的计算器(gui界面)
2020/11/11 Python
H&M美国官网:欧洲最大的服饰零售商
2016/09/07 全球购物
瑞士隐形眼镜和护理产品网上商店:Linsenklick
2019/10/21 全球购物
材料采购员岗位职责
2013/12/17 职场文书
应届生如何写自荐信
2014/01/05 职场文书
教研活动总结
2014/04/28 职场文书
反对四风自我剖析材料
2014/10/07 职场文书
自我检讨报告
2015/01/28 职场文书
交通安全学习心得体会
2016/01/18 职场文书
教你用python实现一个无界面的小型图书管理系统
2021/05/21 Python
Java多线程并发FutureTask使用详解
2022/06/28 Java/Android