博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
谈一次php无限极分类的案例
阅读量:6858 次
发布时间:2019-06-26

本文共 1605 字,大约阅读时间需要 5 分钟。

  hot3.png

作者:白狼 出处: 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。原文有图片。

平时开发中或多或少不可避免会遇到无限极分类的问题,因为效率、逻辑等问题也一直使这类问题比较尖锐。今天我们以yii2框架为基础,栏目无限极为例,对这个问题进行一个简单的处理。

首先我们有一张栏目数据表 tree

表结构如下图(原文有图)

看上去表结构很简单。

我们插入几条测试数据

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看看,效果图如下

这样我们可以看到一个很清晰的树形结构图,也就是我们最终所需要的。

转载于:https://my.oschina.net/manks/blog/671143

你可能感兴趣的文章
浅析高权重网站依托的是什么
查看>>
git cherry-pick
查看>>
在 Mac上压缩的压缩包 在windows上都会产生.DS_Store这种垃圾文件 怎么办
查看>>
List、Map比较排序
查看>>
当税收遇到了电商 团购网站遭遇尴尬
查看>>
争做万年老二? 赶集网三线开战 打的过谁?
查看>>
Centos 系统初始化管理脚本
查看>>
ElementUI之formatter的使用
查看>>
rsync同步备份linux的用户资料
查看>>
单链表的创建和遍历、求单链表中节点的个数、查找单链表中的中间结点、判断单链表是否有环、取出有环链表中环的长度,删除有序链表中的重复结点...
查看>>
Qpid第六课 Qpid-server部署安装
查看>>
CentOS 安装Saltstack
查看>>
SQL----------------数据库连接多个表的操作
查看>>
Struts2配置文件的详解
查看>>
addSubview 跟 insertSubview 区别
查看>>
adb端口被占用
查看>>
第二章 虚拟化 vcenter server
查看>>
Gradle构建多模块项目
查看>>
runas 用法
查看>>
Exchange Server 2010 LAB Part 9.集线器传输服务器的负载均衡机制
查看>>