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中获取内网用户MAC地址(WINDOWS/linux)的实现代码
Aug 11 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
May 27 PHP
使用Linux五年积累的一些经验技巧
Jun 20 PHP
php获取bing每日壁纸示例分享
Feb 25 PHP
免费手机号码归属地API查询接口和PHP使用实例分享
Apr 10 PHP
解读PHP中的垃圾回收机制
Aug 10 PHP
php实现阳历阴历互转的方法
Oct 28 PHP
thinkphp jquery实现图片上传和预览效果
Jul 22 PHP
thinkphp下MySQL数据库读写分离代码剖析
Apr 18 PHP
详解PHP的抽象类和抽象方法以及接口总结
Mar 15 PHP
php中使用array_filter()函数过滤数组实例讲解
Mar 03 PHP
php将xml转化对象的实例详解
Nov 17 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
全国FM电台频率大全 - 31 新疆维吾尔族自治区
2020/03/11 无线电
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
2010/09/01 PHP
PHP常用函数总结(180多个)
2016/12/25 PHP
JavaScript表单常用验证集合
2008/01/16 Javascript
Javascript JSQL,SQL无处不在,
2010/05/05 Javascript
复制js对象方法(详解)
2013/07/08 Javascript
js判断一个字符串是否包含一个子串的方法
2015/01/26 Javascript
javascript实现省市区三级联动下拉框菜单
2015/11/17 Javascript
JavaScript中的原型prototype完全解析
2016/05/10 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
2016/09/02 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
微信小程序 Nginx环境配置详细介绍
2017/02/14 Javascript
详解Vuex中mapState的具体用法
2017/09/28 Javascript
vuejs 制作背景淡入淡出切换动画的实例
2018/09/01 Javascript
详解Vue template 如何支持多个根结点
2020/02/10 Javascript
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
[03:14]2014DOTA2西雅图国际邀请赛 EG战队巡礼
2014/07/07 DOTA
Django中处理出错页面的方法
2015/07/15 Python
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
python利用paramiko连接远程服务器执行命令的方法
2017/10/16 Python
Python字符串格式化%s%d%f详解
2018/02/02 Python
对pycharm 修改程序运行所需内存详解
2018/12/03 Python
对python调用RPC接口的实例详解
2019/01/03 Python
解决pycharm 安装numpy失败的问题
2019/12/05 Python
Lookfantastic日本官网:英国知名护肤、化妆品和头发护理购物网站
2018/04/21 全球购物
英国领先的在线高尔夫商店:Scottsdale Golf
2019/08/26 全球购物
财务会计专业毕业生自荐信
2013/10/19 职场文书
旅游个人求职信范文
2014/01/30 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
毕业班联欢会主持词
2014/03/27 职场文书
《女娲补天》读后感5篇
2019/12/31 职场文书
Html5新增了哪些功能
2021/04/16 HTML / CSS
Python机器学习之KNN近邻算法
2021/05/14 Python
python中的3种定义类方法
2021/11/27 Python
《模拟人生4》推出新补丁 “婚礼奇缘”DLC终于得到修复
2022/04/03 其他游戏