深入浅析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 相关文章推荐
发挥语言的威力--融合PHP与ASP
Oct 09 PHP
php中函数的形参与实参的问题说明
Sep 01 PHP
新手学习PHP的一些基础知识分享
Jul 27 PHP
PHP面向对象法则
Feb 23 PHP
提高PHP编程效率的方法
Nov 07 PHP
学习PHP Cookie处理函数
Aug 09 PHP
PHP Header失效的原因分析及解决方法
Nov 16 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
May 11 PHP
PHP读取、解析eml文件及生成网页的方法示例
Sep 04 PHP
php 删除一维数组中某一个值元素的操作方法
Feb 01 PHP
Laravel 框架路由原理与路由访问实例分析
Apr 14 PHP
thinkphp5 路由分发原理
Mar 18 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
php数组函数序列之array_unshift() 在数组开头插入一个或多个元素
2011/11/07 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
thinkphp框架类库扩展操作示例
2019/11/26 PHP
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
前台js改变Session的值(用ajax实现)
2012/12/28 Javascript
JS页面延迟执行一些方法(整理)
2013/11/11 Javascript
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
javascript setinterval 的正确语法如何书写
2014/06/17 Javascript
Ext JS框架中日期函数的用法及日期选择控件的实现
2016/05/21 Javascript
jQuery mobile的header和footer在点击屏幕的时候消失的解决办法
2016/07/01 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
详解Vue方法与事件
2017/03/09 Javascript
jQuery实现扑克正反面翻牌效果
2017/03/10 Javascript
JS实现延迟隐藏功能的方法(类似QQ头像鼠标放上展示信息)
2017/12/28 Javascript
Vue路由history模式解决404问题的几种方法
2018/09/29 Javascript
详解js模板引擎art template数组渲染的方法
2018/10/09 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
vue将data恢复到初始状态 && 重新渲染组件实例
2020/09/04 Javascript
[01:09:13]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第三场 1月19日
2021/03/11 DOTA
Windows上使用virtualenv搭建Python+Flask开发环境
2016/06/07 Python
Python脚本实现Web漏洞扫描工具
2016/10/25 Python
ubuntu系统下使用pm2设置nodejs开机自启动的方法
2018/05/12 NodeJs
Python装饰器模式定义与用法分析
2018/08/06 Python
django进阶之cookie和session的使用示例
2018/08/17 Python
小 200 行 Python 代码制作一个换脸程序
2020/05/12 Python
德国受欢迎的旅游和休闲网站:lastminute.de
2019/09/23 全球购物
消防战士优秀事迹材料
2014/02/13 职场文书
人事部岗位职责范本
2014/03/05 职场文书
中学生英语演讲稿
2014/04/26 职场文书
高中校园广播稿3篇
2014/09/29 职场文书
五年级学生评语大全
2014/12/26 职场文书
婚礼庆典答谢词
2015/01/20 职场文书
2015年学校医务室工作总结
2015/07/20 职场文书
redis sentinel监控高可用集群实现的配置步骤
2022/04/01 Redis