PHP 无限分类三种方式 非函数的递归调用!


Posted in PHP onAugust 26, 2011

php无限分类大致有三种方式,

1、数据库通过设置父类ID来进行唯一索引,然后使用函数的递归调用实现无限分类;

2、数据库设计通过特定格式进行排列,然后使用mysql查询关键函数:concat。程序实现比较简单;

3、第三种不是太了解, 好像要使用到算法和数据结构进行排列。

今天我主要分享下第二种方式,一开始也是找了很多资料,确实比较难理解。不过最终还是给搞明白了,因此记下随笔,希望通过这篇文章能够帮助到大家。

一、数据库设计:

PHP 无限分类三种方式 非函数的递归调用!

-- 
-- Table structure for table `category` 
-- 
CREATE TABLE IF NOT EXISTS `category` ( 
`id` int(11) NOT NULL AUTO_INCREMENT, 
`catpath` varchar(255) DEFAULT NULL, 
`name` varchar(255) DEFAULT NULL, 
PRIMARY KEY (`id`) 
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=11 ; 
-- 
-- Dumping data for table `category` 
-- 
INSERT INTO `category` (`id`, `catpath`, `name`) VALUES 
(1, '0', '网站首页'), 
(2, '0-1', 'Linux OS'), 
(3, '0-1', 'Apache服务器'), 
(4, '0-1', 'MySQL数据库'), 
(5, '0-1', 'PHP脚本语言'), 
(6, '0-1-2', 'Linux 系统教程'), 
(7, '0-1-2', 'Linux 网络技术'), 
(8, '0-1-2', 'Linux 安全基础'), 
(9, '0-1-2-7', 'Linux LAMP'), 
(10, '0-1-3-10', 'apache Server');

这里说明下,catpath的-链接符号不是固定的,可以选择,;等特殊符号。
二、 PHP代码实现:
$conn = mysql_connect ( 'localhost', 'root', '' ); 
mysql_select_db ( 'test', $conn ); 
mysql_query ( 'set names UTF8' ); 
$sql = "select id,concat(catpath,'-',id) as abspath,name from category order by abspath"; 
$query = mysql_query ( $sql ); 
while ( $row = mysql_fetch_array ( $query ) ) { 
/** 
* 第一种展示方法 
*/ 
/*$space = str_repeat ( '    ', count ( explode ( '-', $row ['abspath'] ) ) - 1 ); 
echo $space . $row ['name'] . '<br>';*/ 
/** 
* 第二种展示方法 
*/ 
$space = str_repeat ( '    ', count ( explode ( '-', $row ['abspath'] ) ) - 1 ); 
$option .= '<option value="' . $row ['id'] . '">' . $space . $row ['name'] . '</option>'; 
} 
echo '<select name="opt">' . $option . '</select>';

上效果图:

PHP 无限分类三种方式 非函数的递归调用!

这里有几个关键的地方需要注意下:
 1、在数据库查询字段是用了concat函数,不了解的地方可以google下。 
 2、第二个地方主要是用到了php中的str_repeat巧妙的设置了空格。
有错误之处,望mail: chenghuiyong1987@gmail.com或者留言

PHP 相关文章推荐
PHP4实际应用经验篇(1)
Oct 09 PHP
需要使用php模板的朋友必看的很多个顶级PHP模板引擎比较分析
May 26 PHP
php 将bmp图片转为jpg等其他任意格式的图片
Jun 21 PHP
MYSQL 小技巧 -- LAST_INSERT_ID
Nov 24 PHP
php修改时间格式的代码
May 29 PHP
PHP正确解析UTF-8字符串技巧应用
Nov 07 PHP
php上传图片存入数据库示例分享
Mar 11 PHP
php命令行使用方法和命令行参数说明
Apr 08 PHP
PHP实现的英文名字全拼随机排号脚本
Jul 04 PHP
php中spl_autoload详解
Oct 17 PHP
php微信公众平台开发(一) 配置接口
Dec 06 PHP
PHP实现上传多图即时显示与即时删除的方法
May 09 PHP
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
Aug 23 #PHP
PHP数组实例总结与说明
Aug 23 #PHP
JpGraph php柱状图使用介绍
Aug 23 #PHP
php报表之jpgraph柱状图实例代码
Aug 22 #PHP
PHP用SAX解析XML的实现代码与问题分析
Aug 22 #PHP
PHP IF ELSE简化/三元一次式的使用
Aug 22 #PHP
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
Aug 22 #PHP
You might like
咖啡界又出新概念,无需咖啡豆的分子咖啡
2021/03/03 咖啡文化
PHP实现获取域名的方法小结
2014/11/05 PHP
详谈phpAdmin修改密码后拒绝访问的问题
2017/04/03 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
JavaScript 笔记二 Array和Date对象方法
2010/05/22 Javascript
基于jQuery的模仿新浪微博时间的组件
2011/10/04 Javascript
JavaScript中json对象和string对象之间相互转化
2012/12/26 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
键盘KeyCode值列表汇总
2013/11/26 Javascript
js完美的div拖拽实例代码
2014/01/22 Javascript
Jquery实现遮罩层的方法
2015/06/08 Javascript
详解webpack异步加载业务模块
2017/06/23 Javascript
JS基于递归实现网页版计算器的方法分析
2017/12/20 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
[02:11]2014DOTA2 TI专访VG战队Fenrir:队伍气氛良好
2014/07/11 DOTA
Linux下为不同版本python安装第三方库
2016/08/31 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
初探TensorFLow从文件读取图片的四种方式
2018/02/06 Python
用TensorFlow实现多类支持向量机的示例代码
2018/04/28 Python
Python并行分布式框架Celery详解
2018/10/15 Python
使用python 打开文件并做匹配处理的实例
2019/01/02 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
详解安装mitmproxy以及遇到的坑和简单用法
2019/01/21 Python
python仿抖音表白神器
2019/04/08 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
Django在Model保存前记录日志实例
2020/05/14 Python
详解numpy.ndarray.reshape()函数的参数问题
2020/10/13 Python
python request 模块详细介绍
2020/11/10 Python
Bergfreunde丹麦:登山装备网上零售商
2017/02/26 全球购物
解决方案设计综合面试题
2015/08/31 面试题
个人工作表现评价材料
2014/09/21 职场文书
就业证明函
2015/06/17 职场文书
健康教育主题班会
2015/08/14 职场文书
MySQL中存储时间的最佳实践指南
2021/07/01 MySQL