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(2)
Oct 09 PHP
php分页示例代码
Mar 19 PHP
php循环输出数据库内容的代码
May 24 PHP
php中的常用魔术方法总结
Aug 02 PHP
Drupal7连接多个数据库及常见问题解决
Mar 02 PHP
PHP编程中的常见漏洞和代码实例
Aug 06 PHP
Laravel框架表单验证详解
Sep 04 PHP
php实现短信发送代码
Jul 05 PHP
PHP如何读取由JavaScript设置的Cookie
Mar 22 PHP
Ubuntu 16.04下安装PHP 7过程详解
Mar 28 PHP
Laravel 默认邮箱登录改成用户名登录的实现方法
Aug 12 PHP
PHP 构造函数和析构函数原理与用法分析
Apr 21 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
php扩展ZF――Validate扩展
2008/01/10 PHP
分享一个超好用的php header下载函数
2014/01/31 PHP
php cli配置文件问题分析
2015/10/15 PHP
PHP递归遍历多维数组实现无限分类的方法
2016/05/06 PHP
JS下拉缓冲菜单示例代码
2013/08/30 Javascript
DOM事件阶段以及事件捕获与事件冒泡先后执行顺序(图文详解)
2015/08/18 Javascript
js判断手机号运营商的方法
2015/10/23 Javascript
js实现延时加载Flash的方法
2015/11/26 Javascript
Web Uploader文件上传插件使用详解
2016/05/10 Javascript
js 声明数组和向数组中添加对象变量的简单实例
2016/07/28 Javascript
nodejs学习笔记之路由
2017/03/27 NodeJs
javascript内存分配原理实例分析
2017/04/10 Javascript
bootstrap treeview 扩展addNode方法动态添加子节点的方法
2017/11/21 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
JS实现京东商品分类侧边栏
2020/12/11 Javascript
python获得图片base64编码示例
2014/01/16 Python
在Python的框架中为MySQL实现restful接口的教程
2015/04/08 Python
Python实现OpenCV的安装与使用示例
2018/03/30 Python
python高阶爬虫实战分析
2018/07/29 Python
Python logging模块用法示例
2018/08/28 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
Python实现堡垒机模式下远程命令执行操作示例
2019/05/09 Python
Django中ORM外键和表的关系详解
2019/05/20 Python
python 导入数据及作图的实现
2019/12/03 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
Python叠加矩形框图层2种方法及效果
2020/06/18 Python
python如何运行js语句
2020/09/09 Python
python re模块常见用法例举
2021/03/01 Python
Python3压缩和解压缩实现代码
2021/03/01 Python
解决Pyinstaller打包软件失败的一个坑
2021/03/04 Python
广场舞大赛策划方案
2014/05/31 职场文书
民族精神月活动总结
2014/08/28 职场文书
2014年保险公司工作总结
2014/11/22 职场文书
JS新手入门数组处理的实用方法汇总
2021/04/07 Javascript
JavaScript实现班级抽签小程序
2021/05/19 Javascript
HTML+CSS实现导航条下拉菜单的示例代码
2021/08/02 HTML / CSS