0

0

php无限极分类是什么意思

(*-*)浩

(*-*)浩

发布时间:2019-09-16 14:18:42

|

3900人浏览过

|

来源于php中文网

原创

php无限极分类简单点说就是一个类可以分成多个子类,然后一个子类又可以分另外多个子类这样无限分下去,就好象windows可以新建一个文件夹,然后在这个文件夹里又可以建一些个文件夹,在文件夹底下还可以建一些文件夹一样

php无限极分类是什么意思

数据库存储

无限极分类其实就是一棵树,所有的节点作为一个存储元素。每个节点可以有任意个孩子节点,且只有一个父节点。

MySQL数据存储,结合项目的数据表存储结构如下:(推荐学习:PHP编程从入门到精通

立即学习PHP免费学习笔记(深入)”;

CREATE TABLE t_tree_info (  `Fid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '标签自增ID',    `Fname` 
varchar(255)  NOT NULL DEFAULT '' COMMENT '节点名称',    `Fpid` bigint(20) unsigned NOT NULL DEFAULT 0  
COMMENT '父节点id',    `Fadd_time` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00'  COMMENT '创建时间',  
`Fmodify_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  PRIMARY KEY (`Fid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='无限极分类菜单存储表';

核心字段就是节点自身唯一标识Fid,和对应的父节点标识Fpid。

技术实现

全局数据存储节点

节点数据在项目中是MySQL存储的,现在为了测试,把MySQL数据直接存放到数组里面,全局使用。数据存储如下:

腾讯交互翻译
腾讯交互翻译

腾讯AI Lab发布的一款AI辅助翻译产品

下载
private static $listData = [
    [
        "Fid" => 1,
        "Fpid" => 8,
        "Fname" => '首页',
    ],
    [
        "Fid" => 2,
        "Fpid" => 8,
        "Fname" => '博客',
    ],
    [
        "Fid" => 3,
        "Fpid" => 8,
        "Fname" => '官网',
    ],
    [
        "Fid" => 4,
        "Fpid" => 2,
        "Fname" => '个人博客',
    ],
    [
        "Fid" => 5,
        "Fpid" => 2,
        "Fname" => '他人博客',
    ],
    [
        "Fid" => 6,
        "Fpid" => 8,
        "Fname" => '测试1',
    ],
    [
        "Fid" => 7,
        "Fpid" => 8,
        "Fname" => '测试2',
    ],
    [
        "Fid" => 8,
        "Fpid" => 0,
        "Fname" => '无限极分类',
    ],
    [
        "Fid" => 9,
        "Fpid" => 5,
        "Fname" => '女性栏目',
    ],
    [
        "Fid" => 10,
        "Fpid" => 5,
        "Fname" => '男性栏目',
    ],
];

引用方式实现无限极分类

思路:

1、即所有待处理的数据进行包装成下标为主键Fid(pk)的数组,便于由Fpid获取对应的父栏目。

2、对包装的数据进行循环,如果为根节点,则将其引用添加到tree中,否则,将其引用添加到其父类的子元素中。这样虽然tree中,只是添加了根节点,但是每个根节点如果有子元素,其中包含了子元素的引用。故能形成树型。

个人觉得引用的设计思路相比递归的思路更容易理解,更直观一些。

代码如下:

/**
 * 把返回的数据集转换成Tree
 * @param array $list 要转换的数据集
 * @param string $pk 自增字段(栏目Fid)
 * @param string $pid parent标记字段
 * @return array
 */
public static function quote_make_tree($list, $pk = 'Fid', $pid = 'Fpid',$child = '_child', $root = 0)
{
    $tree = $packData = [];
    foreach ($list as $data) {
        $packData[$data[$pk]] = $data;
    }
    foreach ($packData as $key =>$val) {
        if ($val[$pid] == $root) {//代表跟节点
          $tree[] = & $packData[$key];
        } else {
          //找到其父类
          $packData[$val[$pid]][$child][] = & $packData[$key];
        }
    }
    return $tree;
}

引用调用树:

/**
 * 引用生成树
 * @return
 */
public static function quote_tree_test()
{
    $tree = self::make_tree(self::$listData, $pk = 'id', $pid = 'pid', $child = '_child', $root = 0);
    echo json_encode($tree);
}

返回结果如下:

[
    {
        "Fid": 8,
        "Fpid": 0,
        "Fname": "无限极分类",
        "_child": [
            {
                "Fid": 1,
                "Fpid": 8,
                "Fname": "首页"
            },
            {
                "Fid": 2,
                "Fpid": 8,
                "Fname": "博客",
                "_child": [
                    {
                        "Fid": 4,
                        "Fpid": 2,
                        "Fname": "个人博客"
                    },
                    {
                        "Fid": 5,
                        "Fpid": 2,
                        "Fname": "他人博客",
                        "_child": [
                            {
                                "Fid": 9,
                                "Fpid": 5,
                                "Fname": "女性栏目"
                            },
                            {
                                "Fid": 10,
                                "Fpid": 5,
                                "Fname": "男性栏目"
                            }
                        ]
                    }
                ]
            },
            {
                "Fid": 3,
                "Fpid": 8,
                "Fname": "官网"
            },
            {
                "Fid": 6,
                "Fpid": 8,
                "Fname": "测试1"
            },
            {
                "Fid": 7,
                "Fpid": 8,
                "Fname": "测试2"
            }
        ]
    }
]

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

686

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

513

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

287

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

519

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

267

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

392

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

542

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

668

2023.08.14

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 13.4万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.3万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 1.0万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号