深入浅析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 相关文章推荐
NT IIS下用ODBC连接数据库
Oct 09 PHP
php array_map()数组函数使用说明
Jul 12 PHP
shopex主机报错误请求解决方案(No such file or directory)
Dec 27 PHP
PHP中的按位与和按位或操作示例
Jan 27 PHP
ThinkPHP在新浪SAE平台的部署实例
Oct 31 PHP
php实现cookie加密的方法
Mar 10 PHP
yii的入口文件index.php中为什么会有这两句
Aug 04 PHP
php中array_slice和array_splice函数解析
Oct 18 PHP
php使用高斯算法实现图片的模糊处理功能示例
Nov 11 PHP
php实现保存周期为1天的购物车类
Jul 07 PHP
Yii 访问 Gii(脚手架)时出现 403 错误
Jun 06 PHP
实现laravel 插入操作日志到数据库的方法
Oct 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
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
PHP实现远程下载文件到本地
2015/05/17 PHP
PHPExcel笔记, mpdf导出
2016/05/03 PHP
PHP页面输出搜索后跳转下一页的处理方法
2016/09/30 PHP
几个javascript操作word的参考代码
2009/10/26 Javascript
Js 刷新框架页的代码
2010/04/13 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
javascript实现无限级select联动菜单
2015/01/02 Javascript
在Javascript中处理字符串之big()方法的使用
2015/06/08 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
2016/02/17 Javascript
Vue中的数据监听和数据交互案例解析
2017/07/12 Javascript
js判断用户是输入的地址请求的路径(实例讲解)
2017/07/18 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
使用pkg打包Node.js应用的方法步骤
2018/10/19 Javascript
vue3修改link标签默认icon无效问题详解
2019/10/09 Javascript
vue使用prop可以渲染但是打印台报错的解决方式
2019/11/13 Javascript
微信小程序实现锚点功能
2019/11/20 Javascript
Python解析、提取url关键字的实例详解
2018/12/17 Python
TensorFlow MNIST手写数据集的实现方法
2020/02/05 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
2020/03/05 Python
使用Python实现批量ping操作方法
2020/05/06 Python
Python调用百度OCR实现图片文字识别的示例代码
2020/07/17 Python
Python如何对齐字符串
2020/07/30 Python
python opencv pytesseract 验证码识别的实现
2020/08/28 Python
Python使用eval函数执行动态标表达式过程详解
2020/10/17 Python
世界上最大的罕见唱片、CD和音乐纪念品网上商店:991.com
2018/05/03 全球购物
法国高保真音响和家庭影院商店:Son Video
2019/04/26 全球购物
关键字throw与throws的用法差异
2016/11/22 面试题
新闻编辑求职信
2014/07/13 职场文书
开展党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
英语专业毕业论文答辩开场白
2015/05/27 职场文书
青年岗位能手事迹材料(2016推荐版)
2016/03/01 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python
Python学习之时间包使用教程详解
2022/03/21 Python
python中 .npy文件的读写操作实例
2022/04/14 Python