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和ACCESS写聊天室(十)
Oct 09 PHP
PHP的加密方式及原理
Jun 14 PHP
mysql,mysqli,PDO的各自不同介绍
Sep 19 PHP
php配合jquery实现增删操作具体实例
Dec 12 PHP
php中filter函数验证、过滤用户输入的数据
Jan 13 PHP
ThinkPHP模板判断输出Present标签用法详解
Jun 30 PHP
typecho插件编写教程(六):调用接口
May 28 PHP
PHP+JS实现大规模数据提交的方法
Jul 02 PHP
php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
Dec 21 PHP
PHP简单判断字符串是否包含另一个字符串的方法
Mar 25 PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
Feb 03 PHP
php批量转换文件夹下所有文件编码的函数类
Aug 06 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
curl实现站外采集的方法和技巧
2014/01/31 PHP
PHP.ini中配置屏蔽错误信息显示和保存错误日志的例子
2014/05/12 PHP
php页面缓存方法小结
2015/01/10 PHP
Zend Framework实现多服务器共享SESSION数据的方法
2016/03/22 PHP
PDO::query讲解
2019/01/29 PHP
this[] 指的是什么内容 讨论
2007/03/24 Javascript
一个简单的js鼠标划过切换效果
2010/06/30 Javascript
JavaScript 选中文字并响应获取的实现代码
2011/08/28 Javascript
jquery 插件学习(五)
2012/08/06 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
利用jq让你的div居中的好方法分享
2013/11/21 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
在AngularJS框架中处理数据建模的方式解析
2016/03/05 Javascript
Laravel中常见的错误与解决方法小结
2016/08/30 Javascript
简单实现jQuery级联菜单
2017/01/09 Javascript
VUE axios发送跨域请求需要注意的问题
2017/07/06 Javascript
JS小球抛物线轨迹运动的两种实现方法详解
2017/12/20 Javascript
详解Angular5 路由传参的3种方法
2018/04/28 Javascript
微信小程序实现图片翻转效果的实例代码
2019/09/20 Javascript
javascript-hashchange事件和历史状态管理实例分析
2020/04/18 Javascript
Vue-resource安装过程及使用方法解析
2020/07/21 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
2020/08/31 Javascript
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
pytorch掉坑记录:model.eval的作用说明
2020/06/23 Python
Python系统公网私网流量监控实现流程
2020/11/23 Python
eDreams加拿大:廉价航班、酒店和度假
2019/03/29 全球购物
Perfume’s Club法国站:购买香水和化妆品
2019/05/02 全球购物
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
环境工程大学生个人的自我评价
2013/10/08 职场文书
2015年招聘工作总结
2014/12/12 职场文书
承诺书范本
2015/01/21 职场文书
2015年宣传部工作总结范文
2015/03/31 职场文书
青年教师听课心得体会
2016/01/15 职场文书
2019事业单位个人工作总结范文
2019/08/26 职场文书
SpringBoot+Redis实现布隆过滤器的示例代码
2022/03/17 Java/Android