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 截取字符串并以零补齐str_pad() 函数
May 07 PHP
PHP批量采集下载美女图片的实现代码
Jun 03 PHP
php 注册时输入信息验证器的实现详解
Jul 05 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
Sep 16 PHP
PHP使用CURL获取302跳转后的地址实例
May 04 PHP
PHP获取短链接跳转后的真实地址和响应头信息的方法
Jul 25 PHP
php中call_user_func函数使用注意事项
Nov 21 PHP
php中mt_rand()随机数函数用法
Nov 24 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
Feb 16 PHP
完美利用Yii2微信后台开发的系列总结
Jul 18 PHP
yii框架搜索分页modle写法
Dec 19 PHP
用php定义一个数组最简单的方法
Oct 04 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
第六节 访问属性和方法 [6]
2006/10/09 PHP
比较简单的百度网盘文件直链PHP代码
2013/03/24 PHP
PHP中使用glob函数实现一句话删除某个目录下的所有文件
2014/07/22 PHP
PHP自带函数给数字或字符串自动补齐位数
2014/07/29 PHP
php+mysql查询优化简单实例
2015/01/13 PHP
使用PHP生成PDF方法详解
2015/01/23 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
php处理json格式数据经典案例总结
2016/05/19 PHP
php实现QQ小程序发送模板消息功能
2019/09/18 PHP
js+CSS 图片等比缩小并垂直居中实现代码
2008/12/01 Javascript
jquery select下拉框操作的一些说明
2010/04/02 Javascript
深入理解Javascript中的循环优化
2013/11/09 Javascript
jquery中$.post()方法的简单实例
2014/02/04 Javascript
Ubuntu中搭建Nodejs开发环境过程分享
2014/06/01 NodeJs
node.js中的emitter.on方法使用说明
2014/12/10 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记8)
2015/12/24 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
jQuery实现导航高亮的方法【附demo源码下载】
2016/11/09 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
AngularJS 异步解决实现方法
2017/06/12 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
2018/01/22 jQuery
浅谈Python数据类型之间的转换
2016/06/08 Python
利用pyinstaller或virtualenv将python程序打包详解
2017/03/22 Python
Django中更改默认数据库为mysql的方法示例
2018/12/05 Python
Tensorflow Summary用法学习笔记
2020/01/10 Python
Python3运算符常见用法分析
2020/02/14 Python
Python爬虫爬取微信朋友圈
2020/08/06 Python
党员弘扬焦裕禄精神思想汇报
2014/09/10 职场文书
2015年党员干部承诺书
2015/01/21 职场文书
学习雷锋精神活动总结
2015/02/06 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
Pytorch中TensorBoard及torchsummary的使用详解
2021/05/12 Python
详解CSS中的特指度和层叠问题
2021/07/15 HTML / CSS
Go 通过结构struct实现接口interface的问题
2021/10/05 Golang
HTML5 新增内容和 API详解
2021/11/17 HTML / CSS
Java 超详细讲解十大排序算法面试无忧
2022/04/08 Java/Android