php实现无限级分类实现代码(递归方法)


Posted in PHP onJanuary 01, 2011

开始以为这样的功能似乎很难,之前也做过一个百科的东西,其中也涉及到了分类的功能,不过不是无限级的分类,而是简单的实现了固定的三级分类,当时是自己设计的,想在想起来实现方法太土了,其实三级分类也只是无限级分类的一种特殊情况而已嘛。经过一段时间考虑,已经有了一些眉目,到网上一查,原来这样的东西铺天盖地,呵呵。其实无限级下拉列表功能是很简单的,无非就是用一个递归算法就好啦。
首先要设计数据库,需要建一个表,里面存储分类信息,至少需要3个字段,第一个是主键(ID),第二个是父级分类ID(parentid),第三个是分类的名称(classname)。可能的一种效果是:
ID PARENTID CLASSNAME
1 0 一级分类A
2 0 一级分类B
3 1 二级分类A
4 1 二级分类B
主要思路:首先看第三行和第四行,父类ID(PARENTID)的值是1,表示属于id=1这个类的子类,而,一,二两行因为是一级分类,没有上级分类,所以父类ID(PARENTID)的值是0,表示初级分类,依次类推便实现了无限级分类。最终的效果是:
├一级分类A
├─┴二级分类A
├─┴二级分类B
├一级分类B
然后就是程序,这里以PHP作为描述语言,可以很方便的改成其他语言,因为原理相似,就是一个递归而已。

<?php 
$dbhost = "localhost"; // 数据库主机名 
$dbuser = "root"; // 数据库用户名 
$dbpd = "123456"; // 数据库密码 
$dbname = "test"; // 数据库名 
mysql_connect($dbhost,$dbuser,$dbpd); //连接主机 
mysql_select_db($dbname); //选择数据库 
mysql_query("SET NAMES 'utf8'"); 
display_tree("├",0); 
function display_tree($tag,$classid) { 
$result = mysql_query(" 
SELECT * 
FROM ylmf_class 
WHERE parentid = '" . $classid . "' 
;" 
); 
while ($row = mysql_fetch_array($result)) { 
// 缩进显示节点名称 
echo $tag.$row['classname'] . "<br/>"; 
//再次调用这个函数显示子节点的子节点 
display_tree($tag."─┴",$row['id']); 
} 
} 
?>

这样递归方法,对于大量的子栏目是个负担,一些成熟的cms系统。都是生产数组方便调用,也能大幅的提高效率。
PHP 相关文章推荐
php的curl实现get和post的代码
Aug 23 PHP
解析func_num_args与func_get_args函数的使用
Jun 24 PHP
关于php程序报date()警告的处理(date_default_timezone_set)
Oct 22 PHP
从零开始学YII2框架(六)高级应用程序模板
Aug 20 PHP
PHP实现的简单分页类及用法示例
May 06 PHP
PHP获取当前文件的父目录方法汇总
Jul 21 PHP
24条货真价实的PHP代码优化技巧
Jul 28 PHP
PHP中for循环与foreach的区别
Mar 06 PHP
PHP环形链表实现方法示例
Sep 15 PHP
PHP实现的CURL非阻塞调用类
Jul 26 PHP
微信公众平台开发教程⑥ 微信开发集成类的使用图文详解
Apr 10 PHP
Laravel中Kafka的使用详解
Mar 24 PHP
php下尝试使用GraphicsMagick的缩略图功能
Jan 01 #PHP
PHP读取XML值的代码(推荐)
Jan 01 #PHP
PHP中simplexml_load_string函数使用说明
Jan 01 #PHP
php xml 入门学习资料
Jan 01 #PHP
PHP+SQL 注入攻击的技术实现以及预防办法
Dec 29 #PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
Dec 29 #PHP
window+nginx+php环境配置 附配置搭配说明
Dec 29 #PHP
You might like
php 连接mysql连接被重置的解决方法
2011/02/15 PHP
php编写简单的文章发布程序
2015/06/18 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
jquery 插件学习(三)
2012/08/06 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
jQuery源码解读之removeClass()方法分析
2015/02/20 Javascript
Html中 IFrame的用法及注意点
2016/12/22 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
jQuery Jsonp跨域模拟搜索引擎
2017/06/17 jQuery
详解react-webpack2-热模块替换[HMR]
2017/08/03 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
2018/04/23 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
vue.js循环radio的实例
2019/11/07 Javascript
JS 事件机制完整示例分析
2020/01/15 Javascript
微信小程序实现选择地址省市区三级联动
2020/06/21 Javascript
微信小程序实现可长按移动控件
2020/11/01 Javascript
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
python通过urllib2获取带有中文参数url内容的方法
2015/03/13 Python
在Python的Django框架中获取单个对象数据的简单方法
2015/07/17 Python
Python解惑之True和False详解
2017/04/24 Python
Python入门_浅谈逻辑判断与运算符
2017/05/16 Python
Python+PIL实现支付宝AR红包
2018/02/09 Python
Python多继承顺序实例分析
2018/05/26 Python
pycharm 配置远程解释器的方法
2018/10/28 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
python交易记录整合交易类详解
2019/07/03 Python
python树的同构学习笔记
2019/09/14 Python
日本乐天德国站:Rakuten.de
2019/05/16 全球购物
给领导的致歉信范文
2014/01/13 职场文书
幼儿园六一儿童节活动方案
2014/08/26 职场文书
工商局局长个人对照检查材料思想汇报
2014/09/23 职场文书
贫困生助学金感谢信
2015/01/21 职场文书
罚站检讨书
2015/01/29 职场文书
使用CSS3实现按钮悬停闪烁动态特效代码
2021/08/30 HTML / CSS