深入浅析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 相关文章推荐
我的论坛源代码(七)
Oct 09 PHP
功能齐全的PHP发送邮件类代码附详细说明
Jul 10 PHP
php自动跳转中英文页面
Jul 29 PHP
php下用cookie统计用户访问网页次数的代码
May 09 PHP
php FLEA中二叉树数组的遍历输出
Sep 26 PHP
php随机输出名人名言的代码
Oct 07 PHP
PHP中使用memcache存储session的三种配置方法
Apr 05 PHP
PHP 快速排序算法详解
Nov 10 PHP
php通过exif_read_data函数获取图片的exif信息
May 21 PHP
thinkphp3.2中实现phpexcel导出带生成图片示例
Feb 14 PHP
PHP实现的字符串匹配算法示例【sunday算法】
Dec 19 PHP
PHP Web表单生成器案例分析
Jun 02 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
关于尾递归的使用详解
2013/05/02 PHP
PHP实现超简单的SSL加密解密、验证及签名的方法示例
2017/08/28 PHP
更换select下拉菜单背景样式的实现代码
2011/12/20 Javascript
JQuery操作tr和td内容的方法实例
2013/03/06 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
vue.js入门教程之计算属性
2016/09/01 Javascript
浅析 NodeJs 的几种文件路径
2017/06/07 NodeJs
基于JS实现网页中的选项卡(两种方法)
2017/06/16 Javascript
Vue学习笔记之表单输入控件绑定
2017/09/05 Javascript
react router 4.0以上的路由应用详解
2017/09/21 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
Javascript实现运算符重载详解
2018/04/07 Javascript
手把手教你 CKEDITOR 4 实现Dialog 内嵌 IFrame操作详解
2019/06/18 Javascript
javascript面向对象三大特征之继承实例详解
2019/07/24 Javascript
基于JS判断对象是否是数组
2020/01/10 Javascript
用js限制网页只在微信浏览器中打开(或者只能手机端访问)
2020/12/24 Javascript
JavaScript中的全局属性与方法深入解析
2020/06/14 Javascript
[03:59]DOTA2英雄梦之声_第07期_水晶室女
2014/06/23 DOTA
一步步解析Python斗牛游戏的概率
2016/02/12 Python
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
利用Python开发实现简单的记事本
2016/11/15 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
2018/05/24 Python
python中enumerate() 与zip()函数的使用比较实例分析
2019/09/03 Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
2020/12/11 Python
建筑毕业生自我鉴定
2013/10/18 职场文书
爸爸的花儿落了教学反思
2014/02/20 职场文书
人力资源作业细则
2014/03/03 职场文书
教师产假请假条
2014/04/10 职场文书
企业安全生产承诺书
2014/05/22 职场文书
大学生村官座谈会发言材料
2014/05/25 职场文书
文明城市标语
2014/06/16 职场文书
2014年房地产个人工作总结
2014/12/20 职场文书
唐山大地震的观后感
2015/06/05 职场文书
拯救大兵瑞恩观后感
2015/06/09 职场文书
Python使用scapy模块发包收包
2021/05/07 Python
《帝国时代4》赛季预告 新增内容编译器可创造地图
2022/04/03 其他游戏