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 相关文章推荐
mysql下创建字段并设置主键的php代码
May 16 PHP
PHP中替换换行符的几种方法小结
Oct 15 PHP
php页面消耗内存过大的处理办法
Mar 18 PHP
使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)
May 05 PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
Jan 21 PHP
PHP对文件夹递归执行chmod命令的方法
Jun 19 PHP
详解PHP对象的串行化与反串行化
Jan 24 PHP
PHP中加速、缓存扩展的区别和作用详解(eAccelerator、memcached、xcache、APC )
Jul 09 PHP
PHP执行shell脚本运行程序不产生core文件的方法
Dec 28 PHP
php使用parse_str实现查询字符串解析到变量中的方法
Feb 17 PHP
PHP基于自定义函数生成笛卡尔积的方法示例
Sep 30 PHP
php处理抢购类功能的高并发请求
Feb 08 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
Thinkphp批量更新数据的方法汇总
2016/06/29 PHP
PHP实现文件下载【实例分享】
2017/04/28 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
2018/06/10 PHP
javascript 跳转代码集合
2009/12/03 Javascript
jQuery 打造动态渐变按钮 详细图文教程
2010/04/25 Javascript
Jquery实现textarea根据文本内容自适应高度
2015/04/03 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
jquery仿苹果的时间/日期选择效果
2017/03/08 Javascript
AngularJS日程表案例详解
2017/08/15 Javascript
jQuery实现文字超过1行、2行或规定的行数时自动加省略号的方法
2018/03/28 jQuery
jQuery插件实现弹性运动完整示例
2018/07/07 jQuery
node.js之基础加密算法模块crypto详解
2018/09/11 Javascript
vue在线动态切换主题色方案
2020/03/26 Javascript
Javascript实现简易天数计算器
2020/05/18 Javascript
IDEA配置jQuery, $符号不再显示黄色波浪线的问题
2020/10/09 jQuery
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
mustache.js实现首页元件动态渲染的示例代码
2020/12/28 Javascript
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
Python获取服务器信息的最简单实现方法
2015/03/05 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
Appium Python自动化测试之环境搭建的步骤
2019/01/23 Python
利用Python模拟登录pastebin.com的实现方法
2019/07/12 Python
Python数据库小程序源代码
2019/09/15 Python
css3中单位px,em,rem,vh,vw,vmin,vmax的区别及浏览器支持情况
2016/12/06 HTML / CSS
HTML5 语音搜索(淘宝店语音搜素)
2013/01/03 HTML / CSS
阿迪达斯丹麦官网:adidas丹麦
2016/10/01 全球购物
SmartBuyGlasses荷兰:购买太阳镜和眼镜
2020/03/16 全球购物
strstr()的简单实现
2013/09/26 面试题
硕士研究生自我鉴定
2013/11/08 职场文书
校园环保建议书
2014/05/14 职场文书
2015年学生会主席工作总结
2015/04/21 职场文书
2015年档案管理员工作总结
2015/05/13 职场文书
评奖评优个人先进事迹材料
2015/11/04 职场文书
pycharm debug 断点调试心得分享
2021/04/16 Python
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript
IIS服务器中设置HTTP重定向访问HTTPS
2022/04/29 Servers