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


Posted in PHP onMarch 22, 2019

相信很多学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 相关文章推荐
在PHP中使用XML
Oct 09 PHP
php环境配置 php5 mysql5 apache2 phpmyadmin安装与配置
Nov 17 PHP
一个简单的PHP投票程序源码
Mar 11 PHP
PHP __autoload函数(自动载入类文件)的使用方法
Feb 04 PHP
php环境无法上传文件的解决方法
Apr 30 PHP
浅析php工厂模式
Nov 25 PHP
为PHP5.4开启Zend OPCode缓存
Dec 26 PHP
php解析http获取的json字符串变量总是空白null
Mar 02 PHP
PHP使用CURL模拟登录的方法
Jul 08 PHP
解析WordPress中函数钩子hook的作用及基本用法
Dec 22 PHP
php array_keys 返回数组的键名
Oct 25 PHP
php使用变量动态创建类的对象用法示例
Feb 06 PHP
用PHP的反射实现委托模式的讲解
Mar 22 #PHP
PHP读取目录树的实现方法分析
Mar 22 #PHP
针对PHP开发安全问题的相关总结
Mar 22 #PHP
浅谈PHP中的Trait使用方法
Mar 22 #PHP
PHP观察者模式定义与用法实例分析
Mar 22 #PHP
wordpress自定义标签云与随机获取标签的方法详解
Mar 22 #PHP
PHP中$GLOBALS与global的区别详解
Mar 21 #PHP
You might like
通过ODBC连接的SQL SERVER实例
2006/10/09 PHP
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
PHP持久连接mysql_pconnect()函数使用介绍
2012/02/05 PHP
基于php无限分类的深入理解
2013/06/02 PHP
php编程中echo用逗号和用点号连接的区别
2016/03/26 PHP
php实现留言板功能(代码详解)
2017/03/28 PHP
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
Laravel5.1框架路由分组用法实例分析
2020/01/04 PHP
jQuery 定时局部刷新(setInterval)
2010/11/19 Javascript
利用JQuery的load函数动态加载其它页面的内容的实现代码
2010/12/14 Javascript
仅IE支持clearAttributes/mergeAttributes方法使用介绍
2012/05/04 Javascript
javascript动态加载三
2012/08/22 Javascript
JavaScript高级程序设计(第3版)学习笔记8 js函数(中)
2012/10/11 Javascript
html5 canvas js(数字时钟)实例代码
2013/12/23 Javascript
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
javascript获取checkbox复选框获取选中的选项
2014/08/12 Javascript
js运动应用实例解析
2015/12/28 Javascript
JS原型对象的创建方法详解
2016/06/16 Javascript
Bootstrap和Java分页实例第二篇
2016/12/23 Javascript
原生javascript移动端滑动banner效果
2017/03/10 Javascript
基于JavaScript实现弹幕特效
2020/08/27 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
vuejs 动态添加input框的实例讲解
2018/08/24 Javascript
trackingjs+websocket+百度人脸识别API实现人脸签到
2018/11/26 Javascript
ES6的Fetch异步请求的实现方法
2018/12/07 Javascript
JavaScript私有变量实例详解
2019/01/24 Javascript
node读写Excel操作实例分析
2019/11/06 Javascript
支付宝小程序实现省市区三级联动
2020/06/21 Javascript
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
python多线程调用exit无法退出的解决方法
2019/02/18 Python
Python使用os.listdir和os.walk获取文件路径
2020/05/21 Python
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
德国在线订购鲜花:Fleurop
2018/08/25 全球购物
走群众路线剖析材料
2014/10/09 职场文书
2015年团支书工作总结
2015/04/03 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python