深入浅析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 相关文章推荐
数据库的日期格式转换
Oct 09 PHP
再次研究下cache_lite
Feb 14 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
Aug 11 PHP
dvwa+xampp搭建显示乱码的问题及解决方案
Aug 23 PHP
PHP连接数据库实现注册页面的增删改查操作
Mar 27 PHP
[原创]php使用curl判断网页404(不存在)的方法
Jun 23 PHP
Yii净化器CHtmlPurifier用法示例(过滤不良代码)
Jul 15 PHP
PHP字符串逆序排列实现方法小结【strrev函数,二分法,循环法,递归法】
Jan 13 PHP
IOS 开发之NSDictionary转换成JSON字符串
Aug 14 PHP
mongodb和php的用法详解
Mar 25 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
Sep 30 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 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
Classes and Objects in PHP5-面向对象编程 [1]
2006/10/09 PHP
PHP的Json中文处理解决方案
2016/09/29 PHP
PHP计算近1年的所有月份
2017/03/13 PHP
解决laravel资源加载路径设置的问题
2019/10/14 PHP
学习YUI.Ext第五日--做拖放Darg&Drop
2007/03/10 Javascript
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
javascript实现选中复选框后相关输入框变灰不可用的方法
2015/08/11 Javascript
javascript类型系统——日期Date对象全面了解
2016/07/13 Javascript
javaScript给元素添加多个class的简单实现
2016/07/20 Javascript
使用grunt合并压缩js和css文件的方法
2017/03/02 Javascript
基于jQuery Ajax实现下拉框无刷新联动
2017/12/06 jQuery
微信小程序ibeacon三点定位详解
2018/10/31 Javascript
JS如何定义用字符串拼接的变量
2020/07/11 Javascript
搭建vscode+vue环境的详细教程
2020/08/31 Javascript
分析在Python中何种情况下需要使用断言
2015/04/01 Python
Python中的Matplotlib模块入门教程
2015/04/15 Python
用ReactJS和Python的Flask框架编写留言板的代码示例
2015/12/19 Python
Python实现嵌套列表及字典并按某一元素去重复功能示例
2017/11/30 Python
24式加速你的Python(小结)
2019/06/13 Python
Python3 Tkinter选择路径功能的实现方法
2019/06/14 Python
Python使用pyyaml模块处理yaml数据
2020/04/14 Python
python如何设置静态变量
2020/09/07 Python
可靠的数据流传输TCP
2016/03/15 面试题
求职推荐信范文
2013/12/01 职场文书
小学新教师培训方案
2014/02/03 职场文书
《商鞅南门立木》教学反思
2014/02/16 职场文书
公司保密承诺书
2014/03/27 职场文书
小学生环保演讲稿
2014/04/25 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
岗位工作说明书
2014/07/29 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
股东出资证明书范例
2014/10/04 职场文书
党的群众路线教育实践活动方案
2014/10/31 职场文书
女方离婚起诉书
2015/05/18 职场文书
MySQL中int (10) 和 int (11) 的区别
2022/01/22 MySQL
CentOS7和8下安装Maven3.8.4
2022/04/07 Servers