深入浅析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 相关文章推荐
CakePHP去除默认显示的标题及图标的方法
Oct 22 PHP
apache+php完美解决301重定向的两种方法
Jun 08 PHP
解析php时间戳与日期的转换
Jun 06 PHP
php检测iis环境是否支持htaccess的方法
Feb 18 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
Oct 08 PHP
PHP使用内置函数生成图片的方法详解
May 09 PHP
php代码检查代理ip的有效性
Aug 19 PHP
php图像处理函数imagecopyresampled用法详解
Dec 02 PHP
laravel自定义分页效果
Jul 23 PHP
浅析PHP开发规范
Feb 05 PHP
PHP各种常见经典算法总结【排序、查找、翻转等】
Aug 05 PHP
PHP 技巧 * SVG 保存为图片(分享图生成)
Apr 02 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压缩HTML函数轻松实现压缩html/js/Css及注意事项
2013/01/27 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
PHP迭代器和生成器用法实例分析
2019/09/28 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
去除链接虚线全面分析总结
2006/08/15 Javascript
用Jquery重写windows.alert方法实现思路
2013/04/03 Javascript
javascript中数组中求最大值示例代码
2013/12/18 Javascript
javascript的回调函数应用示例
2014/02/20 Javascript
JQuery中使用on方法绑定hover事件实例
2014/12/09 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
JS实现移动端判断上拉和下滑功能
2017/08/07 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
2017/10/24 Javascript
详解在React.js中使用PureComponent的重要性和使用方式
2018/07/10 Javascript
解决Layui选择全部,换页checkbox复选框重新勾选的问题方法
2018/08/14 Javascript
node.js实现微信开发之获取用户授权
2019/03/18 Javascript
Element中的Cascader(级联列表)动态加载省\市\区数据的方法
2019/03/27 Javascript
详解Nuxt内导航栏的两种实现方式
2020/04/16 Javascript
详解JavaScript 中的批处理和缓存
2020/11/19 Javascript
JavaScript 中的六种循环方法
2021/01/06 Javascript
利用python爬取软考试题之ip自动代理
2017/03/28 Python
Python3实现发送QQ邮件功能(html)
2017/12/15 Python
Django如何防止定时任务并发浅析
2019/05/14 Python
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
python编写一个会算账的脚本的示例代码
2020/06/02 Python
Python如何爬取51cto数据并存入MySQL
2020/08/25 Python
selenium设置浏览器为headless无头模式(Chrome和Firefox)
2021/01/08 Python
HTML5 canvas基本绘图之绘制曲线
2016/06/27 HTML / CSS
计算s=f(f(-1.4))的值
2014/05/06 面试题
物业管理个人自我评价
2013/11/08 职场文书
电力培训心得体会
2014/09/02 职场文书
树转促学习心得体会
2014/09/10 职场文书
商业门面租房协议书
2014/11/25 职场文书
2016年教师师德师风承诺书
2016/03/25 职场文书
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS
在HTML中引入CSS的几种方式介绍
2021/12/06 HTML / CSS