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目录导航文件代码
Oct 09 PHP
session在PHP大型web应用中的使用
Jun 25 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
Jun 21 PHP
php数组的概述及分类与声明代码演示
Feb 26 PHP
php教程之魔术方法的使用示例(php魔术函数)
Feb 12 PHP
深入浅出php socket编程
May 13 PHP
带你了解PHP7 性能翻倍的关键
Nov 19 PHP
PHP5.2中PDO的简单使用方法
Mar 25 PHP
yii2学习教程之5种内置行为类详解
Aug 03 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
May 02 PHP
tp5.1 框架查询表达式用法详解
May 25 PHP
PHP大文件及断点续传下载实现代码
Aug 18 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
新版mysql+apache+php Linux安装指南
2006/10/09 PHP
PHP与MySQL开发中页面出现乱码的一种解决方法
2007/07/29 PHP
新手学习PHP的一些基础知识分享
2011/07/27 PHP
PHP register_shutdown_function函数的深入解析
2013/06/03 PHP
解析PHP多种序列化与反序列化的方法
2013/06/06 PHP
探讨如何在php168_cms中提取验证码
2013/06/08 PHP
php ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
php控制文件下载速度的方法
2015/03/24 PHP
php获取错误信息的方法
2015/07/17 PHP
laravel 事件/监听器实例代码
2019/04/12 PHP
javascript import css实例代码
2008/07/18 Javascript
javascript Select标记中options操作方法集合
2008/10/22 Javascript
javascript学习笔记(六) Date 日期类型
2012/06/19 Javascript
可在线编辑网页文字效果代码(单击)
2013/03/02 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
JS百度地图搜索悬浮窗功能
2017/01/12 Javascript
vue-cli如何引入bootstrap工具的方法
2017/10/19 Javascript
详解Angular中实现自定义组件的双向绑定的两种方法
2018/11/23 Javascript
[02:05]DOTA2完美大师赛趣味视频之看我表演
2017/11/18 DOTA
动感网页相册 python编写简单文件夹内图片浏览工具
2016/08/17 Python
Python 模拟登陆的两种实现方法
2017/08/10 Python
Python开发的HTTP库requests详解
2017/08/29 Python
python模块之time模块(实例讲解)
2017/09/13 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
Css3实现无缝滚动防抖
2020/09/14 HTML / CSS
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
中英双版中文教师求职信
2013/10/27 职场文书
2014年小学生迎国庆65周年演讲稿
2014/09/27 职场文书
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
群众路线教育实践活动心得体会(四风)
2014/11/03 职场文书
2014年医药代表工作总结
2014/11/22 职场文书
公务员个人年终总结
2015/02/12 职场文书
浙江省杭州市平均工资标准是多少?
2019/07/09 职场文书
解决Go gorm踩过的坑
2021/04/30 Golang
如何利用python实现Simhash算法
2022/06/28 Python