深入浅析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代码
Apr 09 PHP
写php分页时出现的Fatal error的解决方法
Apr 18 PHP
PHP jQuery表单,带验证具体实现方法
Feb 15 PHP
PHP 使用redis简单示例分享
Mar 05 PHP
php实现过滤UBB代码的类
Mar 12 PHP
php算法实例分享
Jul 14 PHP
php中mkdir()函数的权限问题分析
Sep 24 PHP
thinkPHP5.0框架开发规范简介
Mar 25 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
Laravel框架自定义公共函数的引入操作示例
Apr 16 PHP
数据结构之利用PHP实现二分搜索树
Oct 25 PHP
常见的5个PHP编码小陋习以及优化实例讲解
Feb 27 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实现递归循环每一个目录
2010/08/08 PHP
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
php将数组转换成csv格式文件输出的方法
2015/03/14 PHP
PHP中数据类型转换的三种方式
2015/04/02 PHP
详谈PHP中public,private,protected,abstract等关键字的用法
2017/12/31 PHP
php PDO属性设置与操作方法分析
2018/12/27 PHP
js类中获取外部函数名的方法
2007/08/19 Javascript
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
2011/09/20 Javascript
Jquery时间验证和转换工具小例子
2013/07/01 Javascript
JS执行删除前的判断代码
2014/02/18 Javascript
JavaScript中子对象访问父对象的方式详解
2016/09/01 Javascript
js实现随机点名小功能
2017/08/17 Javascript
vue父组件中获取子组件中的数据(实例讲解)
2017/09/27 Javascript
js定时器+简单的动画效果实例
2017/11/10 Javascript
JS html事件冒泡和事件捕获操作示例
2019/05/01 Javascript
jQuery pager.js 插件动态分页功能实例分析
2019/08/02 jQuery
Vue路由模块化配置的完整步骤
2019/08/14 Javascript
[04:22]DOTA2上海特级锦标赛主赛事第四日TOP10
2016/03/06 DOTA
[08:56]DOTA2-DPC中国联赛2月23日Recap集锦
2021/03/11 DOTA
浅谈终端直接执行py文件,不需要python命令
2017/01/23 Python
Python中使用多进程来实现并行处理的方法小结
2017/08/09 Python
python替换字符串中的子串图文步骤
2019/06/19 Python
pandas 层次化索引的实现方法
2019/07/06 Python
python单例模式原理与创建方法实例分析
2019/10/26 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
django中的数据库迁移的实现
2020/03/16 Python
Flask模板引擎Jinja2使用实例
2020/04/23 Python
Django实现简单的分页功能
2021/02/22 Python
采购主管工作职责
2013/12/12 职场文书
入党积极分子自我鉴定
2014/02/18 职场文书
厨师个人自我鉴定范文
2014/04/19 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
2014年检验员工作总结
2014/11/19 职场文书
涨价通知怎么写
2015/04/23 职场文书
岁月神偷观后感
2015/06/11 职场文书
详解nginx.conf 中 root 目录设置问题
2021/04/01 Servers