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的类 功能齐全的发送邮件类
Oct 09 PHP
火车头采集器3.0采集图文教程
Mar 17 PHP
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
Nov 07 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
Aug 18 PHP
php中simplexml_load_file函数用法实例
Nov 12 PHP
php魔术变量用法实例详解
Nov 13 PHP
php生成随机颜色的方法
Nov 13 PHP
PHP实现的线索二叉树及二叉树遍历方法详解
Apr 25 PHP
ThinkPHP使用Ueditor的方法详解
May 20 PHP
tp5(thinkPHP5框架)使用DB实现批量删除功能示例
May 28 PHP
Git命令之分支详解
Mar 02 PHP
PHP 实现缩略图
Mar 09 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
第七节 类的静态成员 [7]
2006/10/09 PHP
Fatal error: session_start(): Failed to initialize storage module: files问题解决方法
2014/05/04 PHP
适用于初学者的简易PHP文件上传类
2015/10/29 PHP
jquery 仿QQ校友的DIV模拟窗口效果源码
2010/03/24 Javascript
jQuery UI Dialog 创建友好的弹出对话框实现代码
2012/04/12 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
2014/06/06 Javascript
推荐10 个很棒的 jQuery 特效代码
2015/10/04 Javascript
JavaScript浏览器对象之一Window对象详解
2016/06/03 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
解析jQueryEasyUI的使用
2016/11/22 Javascript
JS实用的带停顿的逐行文本循环滚动效果实例
2016/11/23 Javascript
jquery插件bootstrapValidator表单验证详解
2016/12/15 Javascript
vue数据双向绑定原理解析(get &amp; set)
2017/03/08 Javascript
Vue.js仿Metronic高级表格(二)数据渲染
2017/04/19 Javascript
微信小程序视图容器(swiper)组件创建轮播图
2020/06/19 Javascript
小程序实现单选多选功能
2018/11/04 Javascript
Node.js 实现简单的无侵入式缓存框架的方法
2019/07/21 Javascript
[01:36]极致酷炫!TI9典藏宝瓶+撼地者至宝展示
2019/06/11 DOTA
[02:23]完美世界全国高校联赛街访DOTA2第一期
2019/11/28 DOTA
Python打印输出数组中全部元素
2018/03/13 Python
python中的协程深入理解
2019/06/10 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
深入了解Python枚举类型的相关知识
2019/07/09 Python
windows下python虚拟环境virtualenv安装和使用详解
2019/07/16 Python
Python 实现日志同时输出到屏幕和文件
2020/02/19 Python
简述进程的启动、终止的方式以及如何进行进程的查看
2013/07/12 面试题
社会公德演讲稿
2014/05/20 职场文书
党员自我评价2015
2015/03/03 职场文书
工会积极分子个人总结
2015/03/03 职场文书
无犯罪记录证明样本
2015/06/16 职场文书
闭幕词的写作格式与范文!
2019/06/24 职场文书
小学生一年级(书信作文)
2019/08/13 职场文书
如何用JavaScript检测当前浏览器是无头浏览器
2021/04/27 Javascript
CSS实现切角+边框+投影+内容背景色渐变效果
2021/11/01 HTML / CSS
Python使用OpenCV实现虚拟缩放效果
2022/02/28 Python
python计算列表元素与乘积详情
2022/08/05 Python