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 相关文章推荐
Windows PHP5和Apache的安装与配置
Jun 08 PHP
PHP下利用header()函数设置浏览器缓存的代码
Sep 01 PHP
PHP CodeBase:将时间显示为&quot;刚刚&quot;&quot;n分钟/小时前&quot;的方法详解
Jun 06 PHP
php绘制一条直线的方法
Jan 24 PHP
Smarty foreach控制循环次数的一些方法
Jul 01 PHP
php通过前序遍历树实现无需递归的无限极分类
Jul 10 PHP
浅谈PHP中foreach/in_array的使用
Nov 02 PHP
Joomla使用Apache重写模式的方法
May 04 PHP
图文详解PHP环境搭建教程
Jul 16 PHP
Docker搭建自己的PHP开发环境
Feb 24 PHP
PHP simplexml_import_dom()函数讲解
Feb 03 PHP
PHP Web表单生成器案例分析
Jun 02 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
访问编码后的中文URL返回404错误的解决方法
2014/08/20 PHP
PHP操作文件的一些基本函数使用示例
2014/11/18 PHP
php实现的简单美国商品税计算函数
2015/07/13 PHP
php实现scws中文分词搜索的方法
2015/12/25 PHP
XHProf报告字段含义的解析
2016/05/17 PHP
php pdo操作数据库示例
2017/03/10 PHP
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
JavaScript中的作用域链和闭包
2012/06/30 Javascript
JS TextArea字符串长度限制代码集合
2012/10/31 Javascript
jQuery定义背景动态切换效果的方法
2015/03/23 Javascript
AngularJs表单验证实例详解
2016/05/30 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
js 数据存储和DOM编程
2017/02/09 Javascript
jQuery实现多张图片上传预览(不经过后端处理)
2017/04/29 jQuery
jQuery实现选中行变色效果(实例讲解)
2017/07/06 jQuery
vue多级复杂列表展开/折叠及全选/分组全选实现
2018/11/05 Javascript
vue-router跳转时打开新页面的两种方法
2019/07/29 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
2020/01/22 Javascript
Preload基础使用方法详解
2020/02/03 Javascript
Vue父子传递实例讲解
2020/02/14 Javascript
详细分析Node.js 多进程
2020/06/22 Javascript
js实现弹窗效果
2020/08/09 Javascript
[03:18]DOTA2放量测试专访820:希望玩家加入国服大家庭
2013/08/25 DOTA
[01:05:41]EG vs Optic Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
[03:10]超级美酒第四天 fy拉比克秀 大合集
2018/06/05 DOTA
[57:09]DOTA2-DPC中国联赛 正赛 Phoenix vs Dynasty BO3 第一场 1月26日
2021/03/11 DOTA
python利用rsa库做公钥解密的方法教程
2017/12/10 Python
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
Python解析、提取url关键字的实例详解
2018/12/17 Python
Bally巴利英国官网:经典瑞士鞋履、手袋及配饰奢侈品牌
2018/05/07 全球购物
学生档案自我鉴定
2013/10/07 职场文书
医生进修自我鉴定
2014/01/19 职场文书
高中语文课后反思
2014/04/27 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
毕业生政审意见范文
2015/06/04 职场文书
python中的被动信息搜集
2021/04/29 Python