各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案各类知识收集,PHP技术分享与解决方案

Str Tom,为分享PHP技术和解决方案,贡献一份自己的力量!
收藏本站(不迷路),每天更新好文章!
当前位置:首页 > CMS教程 > PHP

php无限极分类是什么意思

管理员 2023-09-05
PHP
118

php无限极分类是什么意思

内容导读

收集整理的这篇技术教程文章主要介绍了php无限极分类是什么意思,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3181字,纯文字阅读大概需要5分钟

内容图文

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

数据库存储

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

MySQL数据存储,结合项目的数据表存储结构如下:(推荐学习: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数据直接存放到数组里面,全局使用。数据存储如下:

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无限极分类是什么意思的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的php无限极分类是什么意思全部内容,希望文章能够帮你解决php无限极分类是什么意思所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

扫码关注

qrcode

QQ交谈

回顶部