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 相关文章推荐
一个简单实现多条件查询的例子
Oct 09 PHP
PHP中文件缓存转内存缓存的方法
Dec 06 PHP
php 搜索框提示(自动完成)实例代码
Feb 05 PHP
php简单的留言板与回复功能具体实现
Feb 19 PHP
CI框架自动加载session出现报错的解决办法
Jun 17 PHP
php实现递归的三种基本方式
Jul 04 PHP
php实现简单爬虫的开发
Mar 28 PHP
PHP  实现等比压缩图片尺寸和大小实例代码
Oct 08 PHP
php+webSoket实现聊天室示例代码(附源码)
Feb 17 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
php使用QueryList轻松采集js动态渲染页面方法
Sep 11 PHP
PHP中抽象类,接口功能、定义方法示例
Feb 26 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目录与文件操作
2011/12/30 PHP
PHP 数组基本操作小结(推荐)
2016/06/13 PHP
php实现微信模板消息推送
2018/03/30 PHP
windows系统下简单nodejs安装及环境配置
2013/01/08 NodeJs
javascript中encodeURI和decodeURI方法使用介绍
2013/05/06 Javascript
flash遮住div问题的正确解决方法
2014/02/27 Javascript
jQuery实现DIV层淡入淡出拖动特效的方法
2015/02/13 Javascript
jQuery实现表格展开与折叠的方法
2015/05/04 Javascript
Javascript中Array用法实例分析
2015/06/13 Javascript
深入理解jQuery之事件移除
2016/06/02 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
2016/08/25 Javascript
jQuery纵向导航菜单效果实现方法
2016/12/19 Javascript
jQuery实现锚点向下平滑滚动特效示例
2017/08/29 jQuery
详解JS中统计函数执行次数与执行时间
2018/09/04 Javascript
详解使用React制作一个模态框
2019/03/14 Javascript
weui中的picker使用js进行动态绑定数据问题
2019/11/06 Javascript
JS实现判断移动端PC端功能
2020/02/21 Javascript
BootStrap前端框架使用方法详解
2020/02/26 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
uniapp实现横向滚动选择日期
2020/10/21 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
[56:24]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#1Liquid VS MVP.Phx第二局
2016/03/04 DOTA
python 爬取微信文章
2016/01/30 Python
利用Python开发实现简单的记事本
2016/11/15 Python
基于Django与ajax之间的json传输方法
2018/05/29 Python
Python 单元测试(unittest)的使用小结
2018/11/14 Python
详解Python3之数据指纹MD5校验与对比
2019/06/11 Python
python 利用jinja2模板生成html代码实例
2019/10/10 Python
windows10环境下用anaconda和VScode配置的图文教程
2020/03/30 Python
详细分析Python垃圾回收机制
2020/07/01 Python
python wsgiref源码解析
2021/02/06 Python
英国最大的奢侈品零售网络商城:Flannels
2016/09/16 全球购物
Sony C++笔试题
2013/03/10 面试题
计算机专业推荐信范文
2013/11/27 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python
Redis官方可视化工具RedisInsight安装使用教程
2022/04/19 Redis