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 相关文章推荐
PHP5与MySQL数据库操作常用代码 收集
Mar 21 PHP
深入理解PHP原理之异常机制
Aug 21 PHP
PHP中PDO的错误处理
Sep 04 PHP
php文件打包 下载之使用PHP自带的ZipArchive压缩文件并下载打包好的文件
Jun 13 PHP
PHP编码规范的深入探讨
Jun 06 PHP
php防注入及开发安全详细解析
Aug 09 PHP
使用ob系列函数实现PHP网站页面静态化
Aug 13 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
Dec 12 PHP
PHP中常见的密码处理方式和建议总结
Oct 14 PHP
Ajax+PHP实现的模拟进度条功能示例
Feb 11 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 PHP
PHP如何解决微信文章图片防盗链
Dec 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
php 计算两个时间戳相隔的时间的函数(小时)
2009/12/18 PHP
PHP文件注释标记及规范小结
2012/04/01 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
2013/04/25 PHP
php 验证码(倾斜,正弦干扰线,黏贴,旋转)
2013/06/29 PHP
浅析十款PHP开发框架的对比
2013/07/05 PHP
PHP常量使用的几个需要注意的地方(谨慎使用PHP中的常量)
2014/09/12 PHP
php实现的CSS更新类实例
2014/09/22 PHP
php使用pear_smtp发送邮件
2016/04/15 PHP
thinkPHP实现将excel导入到数据库中的方法
2016/04/22 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
PHP实现基本留言板功能原理与步骤详解
2020/03/26 PHP
PHP程序员简单的开展服务治理架构操作详解(二)
2020/05/14 PHP
JS实现self的resend
2010/07/22 Javascript
javascript权威指南 学习笔记之null和undefined
2011/09/25 Javascript
JS表的模拟方法
2015/02/05 Javascript
JavaScript中DOM详解
2015/04/13 Javascript
jQuery检测某个元素是否存在代码分享
2015/07/09 Javascript
jquery实现简单实用的打分程序实例
2015/07/23 Javascript
js密码强度检测
2016/01/07 Javascript
JS实现快速的导航下拉菜单动画效果附源码下载
2016/11/01 Javascript
canvas的神奇用法
2017/02/03 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
微信小程序实现滚动消息通知
2018/02/02 Javascript
Vue中 key keep-alive的实现原理
2018/09/18 Javascript
详解微信小程序网络请求接口封装实例
2019/05/02 Javascript
前端路由&amp;webpack基础配置详解
2019/06/10 Javascript
python删除文本中行数标签的方法
2018/05/31 Python
Django中的Model操作表的实现
2018/07/24 Python
python实现中文文本分句的例子
2019/07/15 Python
Python并发concurrent.futures和asyncio实例
2020/05/04 Python
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
初中体育教学反思
2014/01/14 职场文书
摄影展策划方案
2014/06/02 职场文书
安全宣传标语口号
2014/06/06 职场文书
教师聘用意向书
2015/05/11 职场文书
JS + HTML 罗盘式时钟的实现
2021/05/21 Javascript