深入浅析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 相关文章推荐
IIS6+PHP5+MySQL5+Zend Optimizer+phpMyAdmin安装配置图文教程 2009年
Jun 08 PHP
php 获取可变函数参数的函数
Aug 26 PHP
php 编写安全的代码时容易犯的错误小结
May 20 PHP
ThinkPHP与PHPExcel冲突解决方法
Aug 08 PHP
php生成图片验证码-附五种验证码
Aug 19 PHP
PHP中函数gzuncompress无法使用的解决方法
Mar 02 PHP
PHP基于自定义类随机生成姓名的方法示例
Aug 05 PHP
PHP守护进程化在C和PHP环境下的实现
Nov 21 PHP
php删除一个路径下的所有文件夹和文件的方法
Feb 07 PHP
PHP crc32()函数讲解
Feb 14 PHP
JS操作XML中DTD介绍及使用方法分析
Jul 04 PHP
php数组指针函数功能及用法示例
Feb 11 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
便携利器 — TECSUN PL-365简评
2021/03/02 无线电
php检测图片木马多进制编程实践
2013/04/11 PHP
ueditor 1.2.6 使用方法说明
2013/07/24 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
php关键字仅替换一次的实现函数
2015/10/29 PHP
magento后台无法登录解决办法的两种方法
2016/12/09 PHP
PHP 信号管理知识整理汇总
2017/02/19 PHP
PHP获取当前日期及本周一是几月几号的方法
2017/03/28 PHP
看了就知道什么是JSON
2007/12/09 Javascript
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
2011/09/28 Javascript
jQuery(非HTML5)可编辑表格实现代码
2012/12/11 Javascript
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
jQuery实现列表内容的动态载入特效
2015/08/08 Javascript
js判断当前页面在移动设备还是在PC端中打开
2016/01/06 Javascript
jQuery中show与hide方法用法示例
2016/09/16 Javascript
Node.js使用Express.Router的方法
2017/11/14 Javascript
JS中touchstart事件与click事件冲突的解决方法
2018/03/12 Javascript
vue2.0的虚拟DOM渲染思路分析
2018/08/09 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
2019/03/05 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
Ubuntu安装Jupyter Notebook教程
2017/10/18 Python
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
使用tensorflow实现线性svm
2018/09/07 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
在Python 不同级目录之间模块的调用方法
2019/01/19 Python
在Python中使用turtle绘制多个同心圆示例
2019/11/23 Python
在Sublime Editor中配置Python环境的详细教程
2020/05/03 Python
如何在scrapy中捕获并处理各种异常
2020/09/28 Python
美国知名男士服饰品牌:Brooks Brothers(布克兄弟)
2016/08/25 全球购物
Farfetch阿联酋:奢侈品牌时尚购物平台
2019/07/26 全球购物
《陶罐和铁罐》教学反思
2014/02/19 职场文书
计算机系本科生求职信
2014/05/31 职场文书
九寨沟导游词
2015/02/02 职场文书
教师节慰问信
2015/02/15 职场文书
详解前端任务构建利器Gulp.js使用指南
2021/04/30 Javascript