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中使用Oracle数据库(6)
Oct 09 PHP
php下通过POST还是GET来传值
Jun 05 PHP
PHP编程最快明白(第一讲 软件环境和准备工作)
Oct 25 PHP
解析dedeCMS验证码的实现代码
Jun 07 PHP
php实现可以设置中奖概率的抽奖程序代码分享
Jan 19 PHP
ThinkPHP结合AjaxFileUploader实现无刷新文件上传的方法
Oct 29 PHP
php需登录的文件上传管理系统
Mar 21 PHP
Yii2 rbac权限控制之菜单menu实例教程
Apr 28 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
PHP设计模式入门之状态模式原理与实现方法分析
Apr 26 PHP
Yii使用EasyWechat实现小程序获取用户的openID的方法
Apr 29 PHP
php7中停止php-fpm服务的方法详解
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
表单复选框向PHP传输数据的代码
2007/11/13 PHP
php连接mssql数据库的几种方法
2013/02/21 PHP
php判断页面是否是微信打开的示例(微信打开网页)
2014/04/25 PHP
在Mac上编译安装PHP7的开发环境
2015/07/28 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
2016/02/15 PHP
用jquery实现学校的校历(asp.net+jquery ui 1.72)
2010/01/01 Javascript
修改jquery里的dialog对话框插件为框架页(iframe) 的方法
2010/09/14 Javascript
最常用的12种设计模式小结
2011/08/09 Javascript
面向对象的Javascript之三(封装和信息隐藏)
2012/01/27 Javascript
从阶乘函数对比Javascript和C#的异同
2012/05/31 Javascript
IE下JS读取xml文件示例代码
2013/08/05 Javascript
jQuery+PHP打造滑动开关效果
2014/12/16 Javascript
jquery实现用户打分评分特效
2015/05/28 Javascript
简介JavaScript中setUTCSeconds()方法的使用
2015/06/12 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
详解JS-- 浮点数运算处理
2016/11/28 Javascript
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
2017/09/22 jQuery
深入理解Node module模块
2018/03/26 Javascript
JavaScript中Array方法你该知道的正确打开方法
2018/09/11 Javascript
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
Python金融数据可视化汇总
2017/11/17 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
Python2和Python3的共存和切换使用
2019/04/12 Python
python实现的生成word文档功能示例
2019/08/23 Python
python 中xpath爬虫实例详解
2019/08/26 Python
Vrbo英国:预订度假屋
2020/08/19 全球购物
如何减少垃圾回收让内存更加有效使用
2013/10/18 面试题
社区庆中秋节活动方案
2014/02/07 职场文书
百日安全生产活动总结
2014/07/05 职场文书
运动会广播稿150字(9篇)
2014/09/20 职场文书
民政局副局长民主生活会个人整改措施
2014/10/04 职场文书
领导班子整改方案和个人整改措施
2014/10/25 职场文书
机关工会工作总结2015
2015/05/26 职场文书
公文写作:教你写“建议书”
2019/05/07 职场文书
Go语言入门exec的基本使用
2022/05/20 Golang