深入浅析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 Class 文章
Apr 04 PHP
php xml-rpc远程调用
Dec 19 PHP
PHP中include()与require()的区别说明
Mar 10 PHP
Zend Studio (eclipse)使用速度优化方法
Mar 23 PHP
PHP把MSSQL数据导入到MYSQL的方法
Dec 27 PHP
PHP简单判断字符串是否包含另一个字符串的方法
Mar 25 PHP
PHP QRCODE生成彩色二维码的方法
May 19 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
Nov 25 PHP
PHP与jquery实时显示网站在线人数实例详解
Dec 02 PHP
浅谈PHP错误类型及屏蔽方法
May 27 PHP
PHP5.6新增加的可变函数参数用法分析
Aug 25 PHP
PHP中通过getopt解析GNU C风格命令行选项
Nov 18 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 返回13位时间戳的实现代码
2016/05/13 PHP
php封装的pdo数据库操作工具类与用法示例
2019/05/08 PHP
跨浏览器开发经验总结(三)   警惕“IE依赖综合症”
2010/05/13 Javascript
jQuery实现 注册时选择阅读条款 左右移动
2013/04/11 Javascript
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
js实现幻灯片效果(基于jquery插件)
2013/11/05 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
2015/04/12 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
2016/07/15 Javascript
JSON与XML的区别对比及案例应用
2016/11/11 Javascript
JS使用正则表达式找出最长连续子串长度
2017/10/26 Javascript
JS二分查找算法详解
2017/11/01 Javascript
vue引入新版 vue-awesome-swiper插件填坑问题
2018/01/25 Javascript
Bootstrap实现可折叠分组侧边导航菜单
2018/03/07 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
2019/05/28 Javascript
JavaScript中this的学习笔记及用法整理
2020/02/17 Javascript
python使用urllib模块开发的多线程豆瓣小站mp3下载器
2014/01/16 Python
python中json格式数据输出的简单实现方法
2016/10/31 Python
Django为窗体加上防机器人的验证码功能过程解析
2019/08/14 Python
python 动态迁移solr数据过程解析
2019/09/04 Python
python3 mmh3安装及使用方法
2019/10/09 Python
Python3.6 中的pyinstaller安装和使用教程
2020/03/16 Python
Python爬虫实现百度翻译功能过程详解
2020/05/29 Python
瑞典Happy Socks美国官网:购买色彩斑斓的快乐袜子
2016/10/19 全球购物
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
美国儿童珠宝在线零售商:Loveivy
2019/05/22 全球购物
Bandier官网:奢侈、时尚前卫的健身服装首选目的地
2020/07/05 全球购物
结构和类有什么异同
2012/07/16 面试题
质检员岗位职责
2013/12/17 职场文书
文明和谐家庭事迹材料
2014/05/18 职场文书
企业安全生产承诺书
2014/05/22 职场文书
学校运动会开幕词
2016/03/03 职场文书
Nginx流量拷贝ngx_http_mirror_module模块使用方法详解
2022/04/07 Servers
Go web入门Go pongo2模板引擎
2022/05/20 Golang