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编实现程动态图像的创建代码
Sep 28 PHP
使用VisualStudio开发php的图文设置方法
Aug 21 PHP
php class中self,parent,this的区别以及实例介绍
Apr 24 PHP
计算php页面运行时间的函数介绍
Jul 01 PHP
PHP flush 函数使用注意事项
Aug 26 PHP
php实现给二维数组中所有一维数组添加值的方法
Feb 04 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
Feb 15 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
php实现微信公众号企业转账功能
Oct 01 PHP
mysqli扩展无法在PHP7下升级问题的解决
Sep 10 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 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执行速度全攻略
2006/10/09 PHP
如何隐藏你的.php文件
2007/01/04 PHP
php使用json_encode对变量json编码
2014/04/07 PHP
PHP基于新浪IP库获取IP详细地址的方法
2017/05/04 PHP
BOOM vs RR BO3 第一场2.13
2021/03/10 DOTA
JavaScript 异步调用框架 (Part 1 - 问题 &amp; 场景)
2009/08/03 Javascript
jQuery 学习6 操纵元素显示效果的函数
2010/02/07 Javascript
JS解决url传值出现中文乱码的另类办法
2013/04/08 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
2014/06/06 Javascript
浅谈JavaScript中Date(日期对象),Math对象
2015/02/05 Javascript
javascript实现省市区三级联动下拉框菜单
2015/11/17 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
Three.js学习之网格
2016/08/10 Javascript
基于input框覆盖掉数字英文的实例讲解
2017/07/21 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
jQuery实现的弹幕效果完整实例
2017/09/06 jQuery
iview同时验证多个表单问题总结
2018/09/29 Javascript
微信小程序封装自定义弹窗的实现代码
2019/05/08 Javascript
在vue项目中 实现定义全局变量 全局函数操作
2020/10/26 Javascript
基于windows下pip安装python模块时报错总结
2018/06/12 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
Python使用sys.exc_info()方法获取异常信息
2020/07/23 Python
Python requests上传文件实现步骤
2020/09/15 Python
python利用 keyboard 库记录键盘事件
2020/10/16 Python
如何编写python的daemon程序
2021/01/07 Python
哥伦比亚最大的网上商店:Linio哥伦比亚
2016/09/25 全球购物
shell程序中如何注释
2012/02/17 面试题
老教师工作总结的自我评价
2013/09/27 职场文书
局领导领导班子四风对照检查材料
2014/09/27 职场文书
庆祝三八妇女节标语
2014/10/09 职场文书
会计手工模拟做账心得体会
2016/01/22 职场文书
创业项目(超低成本创业项目)
2019/08/16 职场文书
Python Django 后台管理之后台模型属性详解
2021/04/25 Python
利用Pycharm连接服务器的全过程记录
2021/07/01 Python
OpenCV 图像梯度的实现方法
2021/07/25 Python