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往windows中添加用户
Dec 06 PHP
解析php中static,const与define的使用区别
Jun 18 PHP
(PHP实现)只使用++运算实现加法,减法,乘法,除法
Jun 27 PHP
php中require和require_once的区别说明
Feb 27 PHP
PHP判断远程图片是否存在的几种方法
May 04 PHP
php中file_exists函数使用详解
May 08 PHP
smarty内部日期函数html_select_date()用法实例分析
Jul 08 PHP
PHP+Ajax实现无刷新分页实例详解(附demo源码下载)
Apr 07 PHP
php支付宝APP支付功能
Jul 29 PHP
PHP让网站移动访问更加友好方法
Feb 14 PHP
laravel框架语言包拓展实现方法分析
Nov 22 PHP
php操作redis常见方法示例【key与value操作】
Apr 14 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把小数转成整数3种方法
2014/06/30 PHP
php导出生成word的方法
2015/12/25 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
js获取select选中的option的text示例代码
2013/12/19 Javascript
jQuery实现网站添加高亮突出显示效果的方法
2015/06/26 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
Bootstrap基本样式学习笔记之表单(3)
2016/12/07 Javascript
AngularJS打开页面隐藏显示表达式用法示例
2016/12/25 Javascript
利用HTML5+Socket.io实现摇一摇控制PC端歌曲切换
2017/01/13 Javascript
Vue组件实例间的直接访问实现代码
2017/08/20 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
2017/09/12 jQuery
基于wordpress的ajax写法详解
2018/01/02 Javascript
angularjs使用gulp-uglify压缩后执行报错的解决方法
2018/03/07 Javascript
详解Node使用Puppeteer完成一次复杂的爬虫
2018/04/18 Javascript
AngularJS 事件发布机制
2018/08/28 Javascript
Vue注册组件命名时不能用大写的原因浅析
2019/04/25 Javascript
Vue.js原理分析之nextTick实现详解
2020/09/07 Javascript
Python中Collection的使用小技巧
2014/08/18 Python
查看Python安装路径以及安装包路径小技巧
2015/04/28 Python
Python简单爬虫导出CSV文件的实例讲解
2018/07/06 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
Python实现多线程下载脚本的示例代码
2020/04/03 Python
详解pandas赋值失败问题解决
2020/11/29 Python
美国照明、家居装饰和家具购物网站:Bellacor
2017/09/20 全球购物
俄罗斯香水和化妆品网上商店:NOTINO.ru
2019/12/17 全球购物
软件测试面试题
2014/01/05 面试题
行政部总经理岗位职责
2014/01/04 职场文书
《狐假虎威》教学反思
2014/02/07 职场文书
病危通知书样本
2015/04/17 职场文书
毕业班工作总结
2015/08/10 职场文书
MySQL高速缓存启动方法及参数详解(query_cache_size)
2021/07/01 MySQL
python opencv将多个图放在一个窗口的实例详解
2022/02/28 Python
Python Django / Flask如何使用Elasticsearch
2022/04/19 Python
Java工作中实用的代码优化技巧分享
2022/04/21 Java/Android
python开发制作好看的时钟效果
2022/05/02 Python
springboot+rabbitmq实现智能家居实例详解
2022/07/23 Java/Android