深入浅析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 相关文章推荐
pdo中使用参数化查询sql
Aug 11 PHP
PHP基础陷阱题(变量赋值)
Sep 12 PHP
PHP自带函数给数字或字符串自动补齐位数
Jul 29 PHP
PHP通过内置函数memory_get_usage()获取内存使用情况
Nov 20 PHP
php中关于socket的系列函数总结
May 18 PHP
10条php编程小技巧
Jul 07 PHP
php+mysql实现无限级分类
Nov 11 PHP
php基于websocket搭建简易聊天室实践
Oct 24 PHP
php正则修正符用法实例详解
Dec 29 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
laravel高级的Join语法详解以及使用Join多个条件
Oct 16 PHP
Laravel框架之解决前端显示图片问题
Oct 24 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
WINDOWS 2000下使用ISAPI方式安装PHP
2006/09/05 PHP
php+mysql实现无限级分类 | 树型显示分类关系
2006/11/19 PHP
php按字符无乱码截取中文的方法
2015/03/27 PHP
Yii1.1框架实现PHP极光推送消息通知功能
2018/09/06 PHP
workerman结合laravel开发在线聊天应用的示例代码
2018/10/30 PHP
PHP如何通过date() 函数格式化显示时间
2020/11/13 PHP
页面调用单个swf文件,嵌套出多个方法。
2011/11/21 Javascript
获取select元素被选中的文本内容的js代码
2014/01/29 Javascript
Angular2 环境配置详细介绍
2016/09/21 Javascript
JQuery和HTML5 Canvas实现弹幕效果
2017/01/04 Javascript
Angular 5.x 学习笔记之Router(路由)应用
2018/04/08 Javascript
JS实现对json对象排序并删除id相同项功能示例
2018/04/18 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
Node登录权限验证token验证实现的方法示例
2020/05/25 Javascript
vue3.0生命周期的示例代码
2020/09/24 Javascript
node使用async_hooks模块进行请求追踪
2021/01/28 Javascript
python删除文件示例分享
2014/01/28 Python
python删除不需要的python文件方法
2018/04/24 Python
用Python实现读写锁的示例代码
2018/11/05 Python
python去重,一个由dict组成的list的去重示例
2019/01/21 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
Python3模拟登录操作实例分析
2019/03/12 Python
python的pytest框架之命令行参数详解(上)
2019/06/27 Python
python把转列表为集合的方法
2019/06/28 Python
python os.fork() 循环输出方法
2019/08/08 Python
python调用c++返回带成员指针的类指针实例
2019/12/12 Python
Pytorch高阶OP操作where,gather原理
2020/04/30 Python
canvas实现漂亮的下雨效果的示例
2018/04/18 HTML / CSS
英国豪华文具和皮具配件经典老品牌:Smythson(斯迈森)
2018/04/19 全球购物
新西兰优惠网站:Treat Me
2019/07/04 全球购物
如何进行Linux分区优化
2013/02/12 面试题
2014年母亲节演讲稿范文
2014/05/07 职场文书
个人事迹材料范文
2014/12/29 职场文书
2016党员学习作风建设心得体会
2016/01/21 职场文书
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL