深入浅析PHP无限极分类的案例教程

5年以前  |  阅读数:871 次  |  编程语言:PHP 

平时开发中或多或少不可避免会遇到无限极分类的问题,因为效率、逻辑等问题也一直使这类问题比较尖锐。今天我们以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看看,效果图如下

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

关于PHP无限极分类的案例教程就给大家介绍这么多,希望对大家有所帮助!

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例