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一些服务器端特性的配置加强php的安全
Oct 09 PHP
PHP在Web开发领域的优势
Oct 09 PHP
Apache下禁止php文件被直接访问的解决方案
Apr 25 PHP
php目录操作实例代码
Feb 21 PHP
php如何解决无法上传大于8M的文件问题
Mar 10 PHP
PHP安全的URL字符串base64编码和解码
Jun 19 PHP
php限制上传文件类型并保存上传文件的方法
Mar 13 PHP
php实现的数字验证码及数字运算验证码
Jul 30 PHP
php文件上传类完整实例
May 14 PHP
深入理解PHP原理之执行周期分析
Jun 01 PHP
php如何计算两坐标点之间的距离
Dec 29 PHP
PHP中的异常处理机制深入讲解
Nov 10 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
Smarty3配置及入门语法
2017/02/22 PHP
PHPExcel 修改已存在Excel的方法
2018/05/03 PHP
javascript eval和JSON之间的联系
2009/12/31 Javascript
基于Jquery的动态创建DOM元素的代码
2010/12/28 Javascript
JavaScript插入动态样式实现代码
2012/02/22 Javascript
javascript创建数组之联合数组的使用方法示例
2013/12/26 Javascript
jquery中val()方法是从最后一个选项往前读取的
2015/09/06 Javascript
异步JS框架的作用以及实现方法
2015/10/29 Javascript
分享我的jquery实现下拉菜单心的
2015/11/29 Javascript
基于JavaScript实现智能右键菜单
2016/03/02 Javascript
nodejs微信公众号支付开发
2016/09/19 NodeJs
vue2实现数据请求显示loading图
2017/11/28 Javascript
jquery ajaxfileuplod 上传文件 essyui laoding 效果【防止重复上传文件】
2018/05/26 jQuery
jQuery实现表单动态添加与删除数据操作示例
2018/07/03 jQuery
详解Vue 动态组件与全局事件绑定总结
2018/11/11 Javascript
vue实现歌手列表字母排序下拉滚动条侧栏排序实时更新
2019/05/14 Javascript
vue项目前端错误收集之sentry教程详解
2019/05/27 Javascript
layui复选框限制选择个数的方法
2019/09/18 Javascript
layUI的验证码功能及校验实例
2019/10/25 Javascript
js表达式与运算符简单操作示例
2020/02/15 Javascript
微信小程序实现录制、试听、上传音频功能(带波形图)
2020/02/27 Javascript
JQuery实现折叠式菜单的详细代码
2020/06/03 jQuery
在vue中使用inheritAttrs实现组件的扩展性介绍
2020/12/07 Vue.js
el-table表头根据内容自适应完美解决表头错位和固定列错位
2021/01/07 Javascript
详谈python在windows中的文件路径问题
2018/04/28 Python
使用Python监控文件内容变化代码实例
2018/06/04 Python
python 返回一个列表中第二大的数方法
2019/07/09 Python
pytorch之inception_v3的实现案例
2020/01/06 Python
Python Des加密解密如何实现软件注册码机器码
2020/01/08 Python
Python实现钉钉/企业微信自动打卡的示例代码
2021/02/02 Python
关于canvas绘制模糊问题的解决方法
2019/09/24 HTML / CSS
舞会礼服和舞会鞋:PromGirl
2019/04/22 全球购物
事业单位绩效考核实施方案
2014/03/27 职场文书
优秀学生干部先进事迹材料
2014/05/26 职场文书
死亡赔偿协议书
2015/01/28 职场文书
【海涛解说】pis亲自推荐,其实你从来不会玩NW
2022/04/01 DOTA