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 相关文章推荐
目录,文件操作详谈―PHP
Nov 25 PHP
php Rename 更改文件、文件夹名称
May 24 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
Dec 16 PHP
第三章 php操作符与控制结构代码
Dec 30 PHP
PHP中soap的用法实例
Oct 24 PHP
php自定义urlencode,urldecode函数实例
Mar 24 PHP
微信随机生成红包金额算法php版
Jul 21 PHP
PHP设计模式之装饰器模式定义与用法简单示例
Aug 13 PHP
PHP 并发场景的几种解决方案
Jun 14 PHP
PHP正则之正向预查与反向预查讲解与实例
Apr 06 PHP
PHP sdk文档处理常用代码示例解析
Dec 09 PHP
PHP中->和=>的意思
Mar 31 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
如何解决CI框架的Disallowed Key Characters错误提示
2013/07/05 PHP
smarty内置函数section的用法
2015/01/22 PHP
CI框架的安全性分析
2016/05/18 PHP
Smarty模板变量调节器用法分析
2016/05/23 PHP
phpstudy的php版本自由修改的方法
2017/10/18 PHP
jquery validation插件表单验证的一个例子
2010/03/03 Javascript
纯js实现遮罩层效果原理分析
2014/05/27 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
webpack 1.x升级过程中的踩坑总结大全
2017/08/09 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
2018/05/01 Javascript
layer.open 子页面弹出层向父页面传输数据的例子
2019/09/26 Javascript
原生JavaScript实现的无缝滚动功能详解
2020/01/17 Javascript
Javascript摸拟自由落体与上抛运动原理与实现方法详解
2020/04/08 Javascript
Python显示进度条的方法
2014/09/20 Python
分享几道你可能遇到的python面试题
2017/07/24 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
利用Python读取txt文档的方法讲解
2018/06/23 Python
python 遍历pd.Series的index和value
2019/11/26 Python
python代码xml转txt实例
2020/03/10 Python
使用phonegap获取位置信息的实现方法
2017/03/31 HTML / CSS
全球酒店比价网:HotelsCombined
2017/06/20 全球购物
Omio法国:全欧洲低价大巴、火车和航班搜索和比价
2017/11/13 全球购物
求最大连续递增数字串(如"ads3sl456789DF3456ld345AA"中的"456789")
2015/09/11 面试题
外企办公室竞聘演讲稿
2013/12/29 职场文书
开业庆典主持词
2014/03/21 职场文书
公共场所禁烟倡议书
2014/08/30 职场文书
教师政风行风自查自纠报告
2014/10/21 职场文书
2014年建筑工程工作总结
2014/12/03 职场文书
教师先进事迹材料
2014/12/16 职场文书
教师听课评语大全
2014/12/31 职场文书
交通事故和解协议书
2015/01/27 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
复兴之路观后感
2015/06/02 职场文书