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 相关文章推荐
桌面中心(一)创建数据库
Oct 09 PHP
PHP 字符串分割和比较
Oct 06 PHP
php 中文字符入库或显示乱码问题的解决方法
Apr 12 PHP
php中inlcude()性能对比详解
Sep 16 PHP
PHP两种去掉数组重复值的方法比较
Jun 19 PHP
ThinkPHP单字母函数(快捷方法)使用总结
Jul 23 PHP
Zend Framework+smarty用法实例详解
Mar 19 PHP
PHP中的密码加密的解决方案总结
Oct 26 PHP
PHP利用Cookie设置用户30分钟未操作自动退出功能
Jul 03 PHP
PHP正则匹配操作简单示例【preg_match_all应用】
Jul 10 PHP
Ajax请求PHP后台接口返回信息的实例代码
Aug 21 PHP
php 中phar包的使用教程详解
Oct 26 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
win2003服务器使用WPS的COM组件的一些问题解决方法
2012/01/11 PHP
用C/C++扩展你的PHP 为你的php增加功能
2012/09/06 PHP
Ajax+PHP快速上手及简单应用说明
2013/07/24 PHP
php增删改查示例自己写的demo
2013/09/04 PHP
PHP缓存机制Output Control详解
2014/07/14 PHP
详解WordPress开发中get_header()获取头部函数的用法
2016/01/08 PHP
php 数组元素快速去重
2017/05/05 PHP
PHP内部实现打乱字符串顺序函数str_shuffle的方法
2019/02/14 PHP
异步加载script的代码
2011/01/12 Javascript
整理一些JavaScript的IE和火狐的兼容性注意事项
2011/03/17 Javascript
jquery入门——事件机制之事件中的冒泡现象示例解释
2020/09/12 Javascript
js window.open弹出新的网页窗口
2014/01/16 Javascript
用JavaScript实现使用鼠标画线的示例代码
2014/08/19 Javascript
Bootstrap学习笔记之进度条、媒体对象实例详解
2017/03/09 Javascript
微信小程序实现多个按钮toggle功能的实例
2017/06/13 Javascript
微信小程序开发animation心跳动画效果
2017/08/16 Javascript
简单实现js进度条加载效果
2020/03/25 Javascript
vue中倒计时组件的实例代码
2018/07/06 Javascript
JS实现继承的几种常用方式示例
2019/06/22 Javascript
Python字符串逐字符或逐词反转方法
2015/05/21 Python
python面试题Python2.x和Python3.x的区别
2019/05/28 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
python3中pip3安装出错,找不到SSL的解决方式
2019/12/12 Python
python实现吃苹果小游戏
2020/03/21 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
2020/03/30 Python
最好的商品表达自己:Cafepress
2019/09/04 全球购物
Java基础面试题
2012/11/02 面试题
资产经营总监岗位职责范文
2013/12/01 职场文书
二年级数学教学反思
2014/01/21 职场文书
求职信的正确写法
2014/07/10 职场文书
淘宝客服工作职责
2014/07/11 职场文书
《日月潭》教学反思
2016/02/20 职场文书
通知怎么写?
2019/04/17 职场文书
美甲店的创业计划书模板
2019/08/23 职场文书
利用前端HTML+CSS+JS开发简单的TODOLIST功能(记事本)
2021/04/13 Javascript
SpringCloud Alibaba项目实战之nacos-server服务搭建过程
2021/06/21 Java/Android