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 相关文章推荐
php中文字符截取防乱码
Mar 28 PHP
解析PHP中intval()等int转换时的意外异常情况
Jun 21 PHP
关于PHP内存溢出问题的解决方法
Jun 25 PHP
通过table标签,PHP输出EXCEL的实现方法
Jul 24 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
Apr 09 PHP
codeigniter集成ucenter1.6双向通信的解决办法
Jun 12 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
Oct 13 PHP
PHP函数func_num_args用法实例分析
Dec 07 PHP
thinkPHP中session()方法用法详解
Dec 08 PHP
PHP连接MySQL进行增、删、改、查操作
Feb 19 PHP
Laravel5框架添加自定义辅助函数的方法
Aug 01 PHP
php转换上传word文件为PDF的方法【基于COM组件】
Jun 10 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
PHP编程网上资源导航
2006/10/09 PHP
php封装的连接Mysql类及用法分析
2015/12/10 PHP
jQuery.Validate 使用笔记(jQuery Validation范例 )
2010/06/25 Javascript
jquery五角星评分插件示例分享
2014/02/21 Javascript
javascript页面上使用动态时间具体实现
2014/03/18 Javascript
jQuery选择器源码解读(一):Sizzle方法
2015/03/31 Javascript
JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js
2015/09/14 Javascript
javascript实现网页端解压并查看zip文件
2015/12/15 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
JavaScript编程学习技巧汇总
2016/02/21 Javascript
微信小程序本作用域下调用全局JS详解及实例
2017/02/22 Javascript
node.js平台下的mysql数据库配置及连接
2017/03/31 Javascript
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
js实现本地时间同步功能
2017/08/26 Javascript
JavaScript数组push方法使用注意事项
2017/10/30 Javascript
解决vue-cli创建项目的loader问题
2018/03/13 Javascript
Nodejs Express 通过log4js写日志到Logstash(ELK)
2018/08/30 NodeJs
React Native中ScrollView组件轮播图与ListView渲染列表组件用法实例分析
2020/01/06 Javascript
vue实现简单瀑布流布局
2020/05/28 Javascript
vue实现移动端拖动排序
2020/08/21 Javascript
小程序自定义弹框效果
2020/11/16 Javascript
原生js实现下拉框选择组件
2021/01/20 Javascript
在Pytorch中使用样本权重(sample_weight)的正确方法
2019/08/17 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
python与js主要区别点总结
2020/09/13 Python
中东地区为妈妈们提供一切的头号购物目的地:Sprii
2018/05/06 全球购物
毕业生自我推荐
2013/11/04 职场文书
事业单位请假制度
2014/01/13 职场文书
个人培训自我鉴定
2014/03/28 职场文书
青春奉献演讲稿
2014/05/08 职场文书
2014年绿化工作总结
2014/12/09 职场文书
一年级数学下册复习计划
2015/01/17 职场文书
北京英文导游词
2015/02/12 职场文书
获奖感言范文
2015/07/31 职场文书
PHP使用非对称加密算法RSA
2021/04/21 PHP
详解MySQL的Seconds_Behind_Master
2021/05/18 MySQL