深入浅析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 批量删除 sql语句
Jun 05 PHP
PhpMyAdmin出现export.php Missing parameter: what /export_type错误解决方法
Aug 09 PHP
PHP递归返回值时出现的问题解决办法
Feb 19 PHP
采用thinkphp自带方法生成静态html文件详解
Jun 13 PHP
浅谈PHP eval()函数定义和用法
Jun 21 PHP
无需数据库在线投票调查php代码
Jul 20 PHP
数组任意位置插入元素,删除特定元素的实例
Mar 02 PHP
Laravel构建即时应用的一种实现方法详解
Aug 31 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
Dec 21 PHP
PHP7创建COOKIE和销毁COOKIE的实例方法
Feb 03 PHP
PHP如何使用array_unshift()在数组开头插入元素
Sep 01 PHP
PHP实现简单注册登录系统
Dec 28 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
Protoss兵种对照表
2020/03/14 星际争霸
php和js如何通过json互相传递数据相关问题探讨
2013/02/26 PHP
测试PHP连接MYSQL成功与否的代码
2013/08/16 PHP
ThinkPHP 模板引擎使用详解
2017/05/07 PHP
PHP获取类私有属性的3种方法
2020/09/10 PHP
用JQuery调用Session的实现代码
2010/10/29 Javascript
js 浏览本地文件夹系统示例代码
2013/10/24 Javascript
Ajax请求在数据量大的时候出现超时的解决方法
2014/02/27 Javascript
javascript闭包入门示例
2014/04/30 Javascript
浅谈JavaScript数据类型
2015/03/03 Javascript
JavaScript中的Promise使用详解
2015/06/24 Javascript
AngularJs 指令详解及示例代码
2016/09/01 Javascript
node.JS md5加密中文与php结果不一致的解决方法
2017/05/05 Javascript
详解JS获取HTML DOM元素的8种方法
2017/06/17 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
nodejs连接mysql数据库及基本知识点详解
2018/03/20 NodeJs
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
用node撸一个监测复联4开售短信提醒的实现代码
2019/04/10 Javascript
利用JavaScript的Map提升性能的方法详解
2019/08/14 Javascript
在layui中layer弹出层点击事件无效的解决方法
2019/09/05 Javascript
[42:23]完美世界DOTA2联赛PWL S3 Forest vs Rebirth 第二场 12.10
2020/12/13 DOTA
Python中自定义函数的教程
2015/04/27 Python
Python获取linux主机ip的简单实现方法
2016/04/18 Python
Python使用filetype精确判断文件类型
2017/07/02 Python
python+VTK环境搭建及第一个简单程序代码
2017/12/13 Python
浅析Python函数式编程
2018/10/06 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
Pycharm Available Package无法显示/安装包的问题Error Loading Package List解决
2020/09/18 Python
html5使用canvas绘制文字特效
2014/12/15 HTML / CSS
捷克领先的户外服装及配件市场零售商:ALPINE PRO
2018/01/09 全球购物
十八大演讲稿
2014/05/22 职场文书
学习三严三实心得体会
2014/10/13 职场文书
事业单位个人查摆问题及整改措施
2014/10/28 职场文书
2015年度女工工作总结
2015/10/22 职场文书