深入浅析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 相关文章推荐
ip签名探针
Oct 09 PHP
PHP脚本的10个技巧(7)
Oct 09 PHP
使用网络地址转换实现多服务器负载均衡
Oct 09 PHP
15种PHP Encoder的比较
Mar 06 PHP
用PHP实现维护文件代码
Jun 14 PHP
在PHP中使用Sockets 从Usenet中获取文件
Jan 10 PHP
PHP 图片水印类代码
Aug 27 PHP
Windows2003下php5.4安装配置教程(IIS)
Jun 30 PHP
thinkPHP基于ajax实现的菜单与分页示例
Jul 12 PHP
详解php用curl调用接口方法,get和post两种方式
Jan 13 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
Oct 10 PHP
禁止直接访问php文件代码分享
May 05 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模板技术原理【一】
2008/01/10 PHP
php结合md5实现的加密解密方法
2016/01/25 PHP
php实现中文转数字
2016/02/18 PHP
php微信开发接入
2016/08/27 PHP
Laravel jwt 多表(多用户端)验证隔离的实现
2019/12/18 PHP
JavaScript判断DOM何时加载完毕的技巧
2012/11/11 Javascript
Three.js源码阅读笔记(光照部分)
2012/12/27 Javascript
jquery判断RadioButtonList和RadioButton中是否有选中项示例
2013/09/29 Javascript
sencha touch 模仿tabpanel导航栏TabBar的实例代码
2013/10/24 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
Javascript实现禁止输入中文或英文的例子
2014/12/09 Javascript
js制作简易年历完整实例
2015/01/28 Javascript
javascript实现2016新年版日历
2016/01/25 Javascript
js实现简单排列组合的方法
2016/01/27 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
vue实现全选、反选功能
2020/11/17 Javascript
Vue2.0父组件与子组件之间的事件发射与接收实例代码
2017/09/19 Javascript
JS实现元素上下左右移动效果
2017/10/18 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
js事件on动态绑定数据,绑定多个事件的方法
2018/09/15 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
[02:27]《DAC最前线》之附加赛征程
2015/01/29 DOTA
[01:37]全新的一集《真视界》——TI7总决赛
2017/09/21 DOTA
Python解释执行原理分析
2014/08/22 Python
django 使用 PIL 压缩图片的例子
2019/08/16 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
Python Tkinter模块 GUI 可视化实例
2019/11/20 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
一道Delphi上机题
2012/06/04 面试题
优秀教师申报材料
2014/12/16 职场文书
个人工作违纪检讨书
2015/05/05 职场文书
2015年幼儿教育工作总结
2015/07/24 职场文书
导游词之千岛湖
2019/09/23 职场文书
mybatis-plus模糊查询指定字段
2022/04/28 Java/Android