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无限级分类是什么意思,php无限极分类是什么意思相关推荐

  1. php根据分类生成网址,PHP实现无限极分类生成分类树的方法

    本文实例讲述了PHP实现无限极分类生成分类树的方法.分享给大家供大家参考,具体如下: 现在的分类数据库设计基本都是:每一个分类有一个id主键字段,一个pid指向父类的id,这样便可实现无限级分类,取出 ...

  2. php 递归实现无限极分类和排序_php递归无限极分类

    递归无限级分类有几种形式,我这里仅仅举例比較经常使用的三种: 第一种:返回有排序的数组: $data = array( 1 => array( 'id' => 1, 'pid' => ...

  3. 无限级分类 php_php无限极分类的方法是什么

    今天给大家带来的是php的无限极分类技术,本人把无限极分类划分为两种.具体方法如下: 首先我把数据库表给大家看看,数据库是tasks,数据库表也是tasks. 相关推荐:<PHP教程> 第 ...

  4. 无限级分类 php_php无限极分类实现方法分析

    本文实例讲述了php无限极分类实现方法.分享给大家供大家参考,具体如下: 今天给大家带来的是php的无限极分类技术,本人把无限极分类划分为两种. 首先我把数据库表给大家看看,数据库是tasks,数据库 ...

  5. php什么是无限极分类,PHP无限极分类

    下面为大家介绍的是PHP无限极分类的代码,希望能够帮助到大家,大家一起来看一看吧function genTree5($items) { foreach ($items as $item) $items ...

  6. 两种实现php无限极分类

    一.两种实现php无限极分类 设置原始数据 public function index(){$items = array(1 => array('id' => 1, 'pid' => ...

  7. php+无限级分类+json,PHP无限极分类巧用引用生成树

    欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 首先看代码实现 function generateTree($items){ $tree = array(): forea ...

  8. 无限级分类 php_PHP无限极分类函数的实现方法详解

    这篇文章主要介绍了PHP无限极分类函数的实现方法,结合实例形式详细分析了php实现无限极分类的具体思路.实现代码与相关注意事项,需要的朋友可以参考下 本文实例讲述了PHP无限极分类函数的实现方法.分享 ...

  9. php无极分类非递归_无限极分类算法,对你一定有帮助

    无限级分类是开发中常见的情况,也经常会在面试,主考官问到,笔试中遇到,因此本文对常见的无限极分类算法进行总结归纳,其实大多数就是迭代与递归. 1.循环迭代实现 $arr = [1=>['id'= ...

最新文章

  1. 如何改变Myeclipse编辑区背景色
  2. SpringBoot 2.1.3配置log4j2日志框架完整代码示例
  3. java 计算股票高低点_[转载]股市中常用的一些计算高低点的计算方法
  4. pytorch注意事项
  5. JAVA蘑菇西餐,蘑菇的22种西餐做法,简单易上手,让你品尝不一样的风味
  6. C 语言 常见数据类型解析
  7. s:iterator标签的使用
  8. LeetCode 2068. 检查两个字符串是否几乎相等
  9. HA集群之三:corosync+pacemaker实现httpd服务的高可用
  10. hive血缘关系之输入表与目标表的解析
  11. Java Map 接口
  12. 科技公司亚马逊名字由来_名字叫什么? 为什么亚马逊的“认可”是可爱营销的灾难性尝试
  13. JS获取IP、MAC和主机名的五种方法
  14. 技术至简-8:调制解调到底是什么样的数学运算?---从时域和频域两个角度看调制解调的本质
  15. 八皇后问题(启发式搜索)
  16. 基于人脸识别的门禁系统设计PPT汇报
  17. 从这条博客开始转变!
  18. 将PSD文件导出图层
  19. 一篇让小白彻底搞懂性能调优!
  20. LeetCode笔记:Biweekly Contest 56(补发)

热门文章

  1. PHP调整图片饱和度,php使用Imagick获取图片主色调
  2. Redis发布订阅和应用场景
  3. 专利申请的流程及好处
  4. Html js获取文本框的内容,并请求服务器
  5. linux ps和 pstree,Linux ps和pstree命令知识点总结
  6. 计算机技术高新技术怎么报名,北京市全国计算机信息高新报名需要什么条件怎么报名...
  7. worthington是谁?worthington抑制剂对酶活性的影响研究
  8. 性能测试loadrunner之Analysis、WIN服务资源监控、nomon工具介绍、性能测试报告
  9. python的起源简史和优点
  10. base-kernel-partion