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中return 和 exit 、break和contiue 区别与用法
Apr 09 PHP
PHP 杂谈《重构-改善既有代码的设计》之三 重新组织数据
Apr 09 PHP
用 Composer构建自己的 PHP 框架之设计 MVC
Oct 30 PHP
php使用str_replace实现输入框回车替换br的方法
Nov 24 PHP
js+php实现静态页面实时调用用户登陆状态的方法
Jan 04 PHP
php实现两个数组相加的方法
Feb 17 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
Feb 26 PHP
PHP连接数据库实现注册页面的增删改查操作
Mar 27 PHP
php排序算法实例分析
Oct 17 PHP
thinkPHP5项目中实现QQ第三方登录功能
Oct 20 PHP
php微信支付之公众号支付功能
May 30 PHP
Laravel5.5 数据库迁移:创建表与修改表示例
Oct 23 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
东芝TOSHIBA RP-F11电路分析
2021/03/02 无线电
PHP4之真OO
2006/10/09 PHP
浅析php header 跳转
2013/06/17 PHP
PHP 错误处理机制
2015/07/06 PHP
优化WordPress的Google字体以加速国内服务器上的运行
2015/11/24 PHP
PHP+MySql实现一个简单的留言板
2020/07/19 PHP
IE下写xml文件的两种方式(fso/saveAs)
2013/08/05 Javascript
javascript日期处理函数,性能优化批处理
2015/09/06 Javascript
基于javascript制作微博发布栏效果
2016/04/04 Javascript
jQuery选择器基础入门教程
2016/05/10 Javascript
BootStrap Fileinput的使用教程
2016/12/30 Javascript
通过vue-cli来学习修改Webpack多环境配置和发布问题
2017/12/22 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
学习LayUI时自研的表单参数校验框架案例分析
2019/07/29 Javascript
[06:50]DSPL次级职业联赛十强晋级之路
2014/11/18 DOTA
使用Python判断质数(素数)的简单方法讲解
2016/05/05 Python
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
关于Python中的向量相加和numpy中的向量相加效率对比
2019/08/26 Python
python代码如何实现余弦相似性计算
2020/02/09 Python
Jupyter Notebook 实现正常显示中文和负号
2020/04/24 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
CSS3 完美实现圆角效果
2009/07/13 HTML / CSS
css3实现蒙版弹幕功能
2019/06/18 HTML / CSS
HTML5实现音频和视频嵌入的方法
2018/08/22 HTML / CSS
介绍一下Ruby中的对象,属性和方法
2012/07/11 面试题
村委会换届选举方案
2014/05/03 职场文书
销售员岗位职责
2014/06/09 职场文书
公司年底活动方案
2014/08/17 职场文书
2014年市场部工作总结
2014/11/25 职场文书
2014年房产销售工作总结
2014/12/08 职场文书
党校党性分析材料
2014/12/19 职场文书
2015年高中班级工作总结
2015/07/21 职场文书
经典爱情感言
2015/08/03 职场文书
决心书格式及范文
2019/06/24 职场文书
一篇带你入门Java垃圾回收器
2021/06/16 Java/Android