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 相关文章推荐
Win9x/ME下Apache+PHP安装配置
Oct 09 PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
Jul 18 PHP
PHP setTime 设置当前时间的代码
Aug 27 PHP
浅析PHP页面局部刷新功能的实现小结
Jun 21 PHP
PHP使用Session遇到的一个Permission denied Notice解决办法
Jul 30 PHP
Laravel 5框架学习之数据库迁移(Migrations)
Apr 08 PHP
php制作的简单验证码识别代码
Jan 26 PHP
Laravel框架中Blade模板的用法示例
Aug 30 PHP
tp5.1框架数据库子查询操作实例分析
May 26 PHP
PHP内存溢出优化代码详解
Feb 26 PHP
PHP7移除的扩展和SAPI
Mar 09 PHP
PHP解决高并发问题
Apr 01 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
咖啡的种类和口感
2021/03/03 新手入门
透析PHP的配置文件php.ini
2006/10/09 PHP
杏林同学录(八)
2006/10/09 PHP
用来给图片加水印的PHP类
2008/04/09 PHP
php与python实现的线程池多线程爬虫功能示例
2016/10/12 PHP
jQuery 开天辟地入门篇一
2009/12/09 Javascript
文本框根据输入内容自适应高度的代码
2011/10/24 Javascript
Javascript的各种节点操作实例演示代码
2012/06/27 Javascript
Array.prototype.concat不是通用方法反驳[译]
2012/09/20 Javascript
jQuery客户端分页实例代码
2013/11/18 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
2016/08/05 Javascript
基于chosen插件实现人员选择树搜索自动筛选功能
2016/09/24 Javascript
JS实现json的序列化和反序列化功能示例
2017/06/13 Javascript
React为 Vue 引入容器组件和展示组件的教程详解
2018/05/03 Javascript
小程序使用watch监听数据变化的方法详解
2019/09/20 Javascript
解决vue页面刷新,数据丢失的问题
2020/11/24 Vue.js
python远程登录代码
2008/04/29 Python
python进阶教程之循环相关函数range、enumerate、zip
2014/08/30 Python
python实现TF-IDF算法解析
2018/01/02 Python
python人民币小写转大写辅助工具
2018/06/20 Python
python中sys.argv函数精简概括
2018/07/08 Python
pandas使用get_dummies进行one-hot编码的方法
2018/07/10 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
pytorch实现mnist数据集的图像可视化及保存
2020/01/14 Python
pytorch 状态字典:state_dict使用详解
2020/01/17 Python
Python3利用scapy局域网实现自动多线程arp扫描功能
2021/01/21 Python
新英格兰最大的特色礼品连锁店:The Paper Store
2018/07/23 全球购物
Araks官网:纽约内衣品牌
2020/10/15 全球购物
意大利网上书店:LaFeltrinelli
2020/06/12 全球购物
50道外企软件测试面试题
2014/08/18 面试题
校园招聘策划书
2014/01/09 职场文书
《燕子》教学反思
2014/02/18 职场文书
宾馆仓管员岗位职责
2014/07/27 职场文书
党员转正意见怎么写
2015/06/03 职场文书
python画条形图的具体代码
2022/04/20 Python