深入浅析PHP无限极分类的案例教程


Posted in PHP onMay 09, 2016

平时开发中或多或少不可避免会遇到无限极分类的问题,因为效率、逻辑等问题也一直使这类问题比较尖锐。今天我们以yii2框架为基础,栏目无限极为例,对这个问题进行一个简单的处理。

首先我们有一张栏目数据表 tree

表结构如下图(原文有图)

深入浅析PHP无限极分类的案例教程

看上去表结构很简单。

我们插入几条测试数据

INSERT INTO `tree` 
(`id`, `parent_id`, `name`) 
VALUES 
(1, 0, 'A'), 
(2, 0, 'B'), 
(3, 1, 'a'), 
(4, 3, 'aa'), 
(5, 2, 'b'), 
(6, 4, 'aaa');

树形结构大致如下

|A
|--a
|----aa
|------aaa
|B
|--b

这也正是我们所需要的数据结构形式,下面我们来看看如何处理才能够得到所需要的结果。

我们前面也说了,以yii2为基础,因此我们的写法也按照面向对象的规则来

class tree { 
//访问index查看树形结构 
public function actionIndex () { 
$data = self::getTree(); 
//为了方便测试,我们这里以json格式输出 
\Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; 
return $data; 
} 
//获取树 
public static function getTree () { 
//这里我们直接获取所有的数据,然后通过程序进行处理 
//在无限极分类中最忌讳的是对数据库进行层层操作,也就很容易造成内存溢出 
//最后电脑死机的结果 
$data = static::find()->all(); 
return self::_generateTree($data); 
} 
//生成树 
private static function _generateTree ($data, $pid = 0) { 
$tree = []; 
if ($data && is_array($data)) { 
foreach($data as $v) { 
if($v['parent_id'] == $pid) { 
$tree[] = [ 
'id' => $v['id'], 
'name' => $v['name'], 
'parent_id' => $v['parent_id'], 
'children' => self::_generateTree($data, $v['id']), 
]; 
} 
} 
} 
return $tree; 
} 
}

我们访问下tree/index看看,效果图如下

深入浅析PHP无限极分类的案例教程

这样我们可以看到一个很清晰的树形结构图,也就是我们最终所需要的。

关于PHP无限极分类的案例教程就给大家介绍这么多,希望对大家有所帮助!

PHP 相关文章推荐
Breeze 文章管理系统 v1.0.0正式发布
Dec 14 PHP
php小技巧 把数组的键和值交换形成了新的数组,查找值取得键
Jun 02 PHP
phpize的深入理解
Jun 03 PHP
php中chdir()函数用法实例
Nov 13 PHP
php站内搜索关键词变亮的实现方法
Dec 30 PHP
PHP查找数值数组中不重复最大和最小的10个数的方法
Apr 20 PHP
PHP自定义函数实现格式化秒的方法
Sep 14 PHP
Laravel 中创建 Zip 压缩文件并提供下载的实现方法
Apr 02 PHP
Laravel中9个不经常用的小技巧汇总
Apr 16 PHP
php使用socket调用http和smtp协议实例小结
Jul 26 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 PHP
PHP Web表单生成器案例分析
Jun 02 PHP
实例讲解php数据访问
May 09 #PHP
php查询操作实现投票功能
May 09 #PHP
解决yii2左侧菜单子级无法高亮问题的方法
May 08 #PHP
php面向对象编程self和static的区别
May 08 #PHP
Laravel与CI框架中截取字符串函数
May 08 #PHP
PHP框架性能测试报告
May 08 #PHP
Thinkphp单字母函数使用指南
May 08 #PHP
You might like
做一个有下拉功能的留言版
2006/10/09 PHP
PHP 获取远程文件内容的函数代码
2010/03/24 PHP
php可生成缩略图的文件上传类实例
2014/12/17 PHP
PHP实现删除字符串中任何字符的函数
2015/08/11 PHP
为Yahoo! UI Extensions Grid增加内置的可编辑器
2007/03/10 Javascript
JQuery 文本框使用小结
2010/05/22 Javascript
js/jQuery对象互转(快速操作dom元素)
2013/02/04 Javascript
raphael.js绘制中国地图 地图绘制方法
2014/02/12 Javascript
JavaScript判断是否为数字的4种方法及效率比较
2015/04/01 Javascript
基于BootStarp的Dailog
2016/04/28 Javascript
jquery文字填写自动高度的实现方法
2016/11/07 Javascript
JavaScript原型继承_动力节点Java学院整理
2017/06/30 Javascript
JavaScript中数组常见操作技巧
2017/09/01 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
2017/10/16 Javascript
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
jQuery实现滑动星星评分效果(每日分享)
2019/11/13 jQuery
Python天气预报采集器实现代码(网页爬虫)
2012/10/07 Python
Python基于matplotlib绘制栈式直方图的方法示例
2017/08/09 Python
Pandas标记删除重复记录的方法
2018/04/08 Python
Python实现FTP弱口令扫描器的方法示例
2019/01/31 Python
python 中如何获取列表的索引
2019/07/02 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
Python3利用openpyxl读写Excel文件的方法实例
2021/02/03 Python
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
可持续木材、生态和铝制太阳镜:Proof Eyewear
2019/07/24 全球购物
eBay美国官网:eBay.com
2020/10/24 全球购物
优良学风班总结材料
2014/02/08 职场文书
房屋租赁协议书(标准版)
2014/10/02 职场文书
2015年检验科工作总结
2015/04/27 职场文书
2016年春季运动会广播稿
2015/08/19 职场文书
2016年党员干部廉政承诺书
2016/03/24 职场文书
go语言中fallthrough的用法说明
2021/05/06 Golang
教你修复 Win11应用商店加载空白问题
2021/12/06 数码科技
CSS三大特性继承性、层叠性和优先级详解
2022/01/18 HTML / CSS
英国数字版游戏销量周榜公布 《小缇娜的奇幻之地》登顶
2022/04/03 其他游戏
人物搭配车车超萌联名预备中 【咒术迴战】 ⨯ 【天竺鼠车车】 展开合作
2022/04/11 日漫