深入浅析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 相关文章推荐
第1次亲密接触PHP5(2)
Oct 09 PHP
substr()函数中文版
Oct 09 PHP
PHP读取XML值的代码(推荐)
Jan 01 PHP
PHP中将ip地址转成十进制数的两种实用方法
Aug 15 PHP
让ThinkPHP支持大小写url地址访问的方法
Oct 31 PHP
浅谈php优化需要注意的地方
Nov 27 PHP
php include类文件超时问题处理
Feb 06 PHP
Codeigniter的dom类用法实例
Jun 26 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
May 04 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
php微信开发之关注事件
Jun 14 PHP
在 Laravel 中动态隐藏 API 字段的方法
Oct 25 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
CI(Codeigniter)的Setting增强配置类实例
2016/01/06 PHP
php构造方法中析构方法在继承中的表现
2016/04/12 PHP
JSON字符串传到后台PHP处理问题的解决方法
2016/06/05 PHP
写得不错的jquery table鼠标经过变色代码
2013/09/27 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
JS选中checkbox后获取table内一行TD所有数据的方法
2015/07/01 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
javascript实现瀑布流加载图片原理
2016/02/02 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
bootstrap fileinput完整实例分享
2016/11/08 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
vue中axios请求的封装实例代码
2019/03/23 Javascript
在Django的URLconf中使用命名组的方法
2015/07/18 Python
在Python程序中操作MySQL的基本方法
2015/07/29 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
Python双精度浮点数运算并分行显示操作示例
2017/07/21 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
2018/02/01 Python
对python3 中方法各种参数和返回值详解
2018/12/15 Python
详解python中sort排序使用
2019/03/23 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
Keras 实现加载预训练模型并冻结网络的层
2020/06/15 Python
Jeep牧马人、切诺基和自由人零配件:4 Wheel Drive Hardware
2017/07/02 全球购物
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
高性能装备提升营地:Kammok
2019/02/27 全球购物
德国的大型美妆个护电商:Flaconi
2020/06/26 全球购物
JDK安装目录下有哪些内容
2014/08/25 面试题
J2EE系统只能是基于web
2015/09/08 面试题
大学本科生的个人自我评价
2013/12/09 职场文书
五心教育心得体会
2014/09/04 职场文书
大学生操行评语大全
2014/12/31 职场文书
公司慰问信范文
2015/03/23 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
PHP对接阿里云虚拟号的实现(号码隐私保护)
2021/04/06 PHP
springboot+VUE实现登录注册
2021/05/27 Vue.js
数据设计之权限的实现
2022/08/05 MySQL