PHP利用递归函数实现无限级分类的方法

 更新时间:2019年03月22日 10:01:53   作者:CODETC  
今天小编就为大家分享一篇关于PHP利用递归函数实现无限级分类的方法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

相信很多学php的很多小伙伴都会尝试做一个网上商城作为提升自己技术的一种途径。各种对商品分类,商品名之类的操作应该是得心应手,那么就可以尝试下无限级分类列表的制作了。

什么是无限级分类?

无限级分类是一种分类技巧,例如部门组织,文章分类,学科分类等常用到无限级分类,将其简单理解成分类就好了。其实我们仔细想一下,生活中的分类简直太多了,衣服可以分为男装和女装,也可以分为上衣和裤子,也可以根据年龄段分类。分类无处不在,分类显得“无限”。我这里就不说无限分类的必要性了。

无限级分类原理简介

无限分类看似"高大上",实际上原理是非常简单的 。无限分类不仅仅需要代码的巧妙性,也要依托数据库设计的合理性。要满足无限级分类,数据库需要有两个必须的字段,id,pid。id用来标识自身,而pid则是用来表明父级id。也就是说,每个分类记录不仅描述了自身,还描述了与其关心最为紧密的另一个id。看似复杂的事情被这样一个小技巧解决了。

php无限级分类是经常要用到的,本人以前一直用的是已经写好的,所以没仔细去研究过,下面是一个使用递归实现的简单的php无限级分类的函数;也许这不是最优的方法,但对于一般的应用也足够了。

数据表结构

CREATE TABLE IF NOT EXISTS `category` (
 `id` int(5) NOT NULL AUTO_INCREMENT COMMENT '唯一自增id',
 `pid` int(5) NOT NULL DEFAULT '0' COMMENT '父id',
 `sort` int(2) NOT NULL DEFAULT '0' COMMENT '排序数字',
 `name` varchar(30) DEFAULT NULL COMMENT '名称',
 PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='无限极分类表' AUTO_INCREMENT=1 ;

数据

INSERT INTO `category` (`id`, `pid`, `sort`, `name`) VALUES
(1, 0, 1, 'php'),
(2, 0, 2, '数据库'),
(3, 0, 3, 'javascript'),
(4, 1, 1, '框架模板'),
(5, 1, 2, '函数总结'),
(6, 2, 1, 'mysql'),
(7, 4, 1, '框架'),
(8, 4, 2, '模板'),
(9, 8, 1, 'smarty'),
(10, 7, 2, 'thinkphp'),
(11, 10, 1, 'thinkphp技巧'),
(12, 10, 2, 'thinkphp模板'),
(13, 12, 3, '模板知识总结'),
(14, 12, 2, '模板视频教程'),
(15, 11, 1, 'model技巧');

函数实现代码

function tree(&$list,$pid=0,$level=0,$html='--'){
  static $tree=array();
  foreach($list as $v){
    if($v['pid']==$pid){
      $v['level']=$level;
      $v['html']=str_repeat($html,$level);
      $tree[]=$v;
      tree($list,$v['id'],$level+1,$html);
    } 
  }
  return $tree;
}

以上tree函数的第一个参数$list就是获取的如上表的一个二维数组的结果集。需要注意的是从数据库获取结果集的sql语句必须加上order by sort asc,否则sort字段将不能发挥排序的作用。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

相关文章

  • php eval函数用法总结

    php eval函数用法总结

    这个函数我想很多朋友都知道,黑客用得最多的一句了,可以解析php 代码并且运行哦,eval是函数不可在php中禁止,以前我就以为可以在php.ini禁止此函数,结果失败了
    2012-10-10
  • PHP转盘抽奖接口实例

    PHP转盘抽奖接口实例

    这篇文章主要介绍了PHP转盘抽奖接口的实现方法,实例分析了随机抽奖接口的实现原理与对应数据库操作的技巧,需要的朋友可以参考下
    2015-02-02
  • PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例

    PHP基于正则批量替换Img中src内容实现获取缩略图的功能示例

    这篇文章主要介绍了PHP基于正则批量替换Img中src内容实现获取缩略图的功能,涉及php针对页面img元素的正则匹配与替换操作相关实现技巧,需要的朋友可以参考下
    2017-06-06
  • 关于PHP通用返回值设置方法

    关于PHP通用返回值设置方法

    下面小编就为大家带来一篇关于PHP通用返回值设置方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • php实现简单文件下载的方法

    php实现简单文件下载的方法

    这篇文章主要介绍了php实现简单文件下载的方法,以实例形式简单分析了文件下载的原理与实现技巧,非常简单实用,需要的朋友可以参考下
    2015-01-01
  • php实现用户注册密码的crypt加密

    php实现用户注册密码的crypt加密

    这篇文章主要为大家详细介绍了php实现用户注册密码的crypt加密,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Ubuntu 16.04下安装PHP 7过程详解

    Ubuntu 16.04下安装PHP 7过程详解

    这篇文章主要给大家介绍了在Ubuntu 16.04系统下安装PHP 7的全过程,文中介绍的非常详细,对大家的学习或者工作具有一定的参考价值,需要的朋友们下面来一起看看吧。
    2017-03-03
  • php闭包中使用use声明变量的作用域实例分析

    php闭包中使用use声明变量的作用域实例分析

    这篇文章主要介绍了php闭包中使用use声明变量的作用域,结合实例形式分析了闭包中use声明变量作用域的相关原理与分析,需要的朋友可以参考下
    2018-08-08
  • PHP实现图片旋转的方法详解

    PHP实现图片旋转的方法详解

    这篇文章主要为大家详细介绍了PHP如何实现图片旋转功能,文中的示例代码讲解详细,对我们学习PHP有一定帮助,感兴趣的小伙伴可以了解一下
    2022-11-11
  • [PHP]实用函数10

    [PHP]实用函数10

    [PHP]实用函数10...
    2007-11-11

最新评论