深入浅析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 相关文章推荐
浅谈Windows下 PHP4.0与oracle 8的连接设置
Oct 09 PHP
PHP设计聊天室步步通
Oct 09 PHP
smarty 原来也不过如此~~呵呵
Nov 25 PHP
纯php打造的tab选项卡效果代码(不用js)
Dec 29 PHP
浏览器关闭后,能继续执行的php函数(ignore_user_abort)
Aug 01 PHP
无JS,完全php面向过程数据分页实现代码
Aug 27 PHP
解析yii数据库的增删查改
Jun 20 PHP
php解压文件代码实现php在线解压
Feb 13 PHP
PHP生成等比缩略图类和自定义函数分享
Jun 25 PHP
ThinkPHP和UCenter接口冲突的解决方法
Jul 25 PHP
php表单加入Token防止重复提交的方法分析
Oct 10 PHP
php 根据自增id创建唯一编号类
Apr 06 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 URL编码解码函数代码
2009/03/10 PHP
PHP中的MYSQL常用函数(php下操作数据库必备)
2010/09/12 PHP
破除网页鼠标右键被禁用的绝招大全
2006/12/27 Javascript
基于prototype扩展的JavaScript常用函数库
2010/11/30 Javascript
JavaScript之appendChild、insertBefore和insertAfter使用说明
2010/12/30 Javascript
JQuery选择器特辑 详细小结
2012/05/14 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
JavaScript字符串对象fromCharCode方法入门实例(用于把Unicode值转换为字符串)
2014/10/17 Javascript
node中socket.io的事件使用详解
2014/12/15 Javascript
jQuery 遍历函数详解
2015/07/05 Javascript
JS实现仿微博可关闭弹出层效果
2015/09/21 Javascript
js判断价格,必须为数字且不能为负数的实现方法
2016/10/07 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
JavaScript闭包和范围实例详解
2016/12/19 Javascript
JavaScript和JQuery获取DIV值的方法示例
2017/03/07 Javascript
基于vue的验证码组件的示例代码
2019/01/22 Javascript
Node.js Windows Binary二进制文件安装方法
2019/05/16 Javascript
vue的三种图片引入方式代码实例
2019/11/19 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
在Windows系统上搭建Nginx+Python+MySQL环境的教程
2015/12/25 Python
Python回文字符串及回文数字判定功能示例
2018/03/20 Python
Python实现的knn算法示例
2018/06/14 Python
对Python3.x版本print函数左右对齐详解
2018/12/22 Python
python pexpect ssh 远程登录服务器的方法
2019/02/14 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
Python日志syslog使用原理详解
2020/02/18 Python
python将下载到本地m3u8视频合成MP4的代码详解
2020/11/24 Python
css3 中translate和transition的使用方法
2020/03/26 HTML / CSS
工程造价专业大专生求职信
2013/10/06 职场文书
高中毕业生自我鉴定
2013/11/03 职场文书
业务主管岗位职责
2013/11/20 职场文书
小学生民族团结演讲稿
2014/08/27 职场文书
无刑事犯罪记录证明
2014/09/18 职场文书
2014年污水处理厂工作总结
2014/12/19 职场文书
春秋淹城导游词
2015/02/11 职场文书