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+MySQL的聊天室设计
Oct 09 PHP
PHP面向对象概念
Nov 06 PHP
Codeigniter实现处理用户登录验证后的URL跳转
Jun 12 PHP
浅谈PHP中foreach/in_array的使用
Nov 02 PHP
基于ThinkPHP实现批量删除
Dec 18 PHP
PHP Echo字符串的连接格式
Mar 07 PHP
基于php实现的php代码加密解密类完整实例
Oct 12 PHP
php中简单的对称加密算法实现
Jan 05 PHP
php 数组元素快速去重
May 05 PHP
php使用curl下载指定大小的文件实例代码
Sep 30 PHP
PHP使用PDO抽象层获取查询结果的方法示例
May 10 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
Oct 22 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 !function_exists(&quot;T7FC56270E7A70FA81A5935B72EACBE29&quot;))代码解密
2011/01/07 PHP
php判断用户是否手机访问代码
2015/06/08 PHP
PHP的Yii框架的基本使用示例
2015/08/21 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
使用 laravel sms 构建短信验证码发送校验功能
2017/11/06 PHP
PHP7原生MySQL数据库操作实现代码
2020/07/03 PHP
图片完美缩放
2006/09/07 Javascript
北京奥运官方网站幻灯切换效果flash版打包下载
2008/01/30 Javascript
jQuery库与其他JS库冲突的解决办法
2010/02/07 Javascript
Jquery Autocomplete 结合asp.net使用要点
2010/10/29 Javascript
图片无缝滚动代码(向左/向下/向上)
2013/04/10 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
javascript日期格式化方法小结
2015/12/17 Javascript
探索angularjs+requirejs全面实现按需加载的套路
2016/02/26 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
深入理解vue.js中的v-if和v-show
2017/06/22 Javascript
JavaScript全屏和退出全屏事件总结(附代码)
2017/08/17 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
2017/09/01 jQuery
jQuery UI Draggable + Sortable 结合使用(实例讲解)
2017/09/07 jQuery
详解js模板引擎art template数组渲染的方法
2018/10/09 Javascript
五分钟搞懂Vuex实用知识(小结)
2019/08/12 Javascript
python中的格式化输出用法总结
2016/07/28 Python
python实现两个字典合并,两个list合并
2019/12/02 Python
使用Nibabel库对nii格式图像的读写操作
2020/07/01 Python
HTML5声音录制/播放功能的实现代码
2018/05/03 HTML / CSS
Zavvi荷兰:英国大型音像制品和图书游戏零售商
2018/03/22 全球购物
最新远光软件笔试题面试题内容
2013/11/08 面试题
AJAX的优缺点都有什么
2015/08/18 面试题
电子商务专业学生的自我鉴定
2013/11/28 职场文书
2014年寒假社会实践活动心得体会
2014/04/07 职场文书
应届毕业生求职信
2014/05/26 职场文书
上课睡觉万能检讨书
2015/02/17 职场文书
演讲稿:​快乐,从不抱怨开始!
2019/04/02 职场文书
vue实现锚点定位功能
2021/06/29 Vue.js
Ruby使用Mysql2连接操作MySQL
2022/04/19 Ruby