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模块memcache和memcached区别分析
Jun 14 PHP
php中比较简单的导入phpmyadmin生成的sql文件的方法
Jun 28 PHP
神盾加密解密教程(二)PHP 神盾解密
Jun 08 PHP
php程序总是提示验证码输入有误解决方案
Jan 07 PHP
php文件操作之小型留言本实例
Jun 20 PHP
PHP经典实用正则表达式小结
May 04 PHP
php readfile下载大文件失败的解决方法
May 22 PHP
PHP查询分页的实现代码
Jun 09 PHP
php使用 readfile() 函数设置文件大小大小的方法
Aug 11 PHP
基于laravel-admin 后台 列表标签背景的使用方法
Oct 03 PHP
Laravel框架之解决前端显示图片问题
Oct 24 PHP
php中array_fill函数的实例用法
Mar 02 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
JAVA/JSP学习系列之四
2006/10/09 PHP
php 获取页面中指定内容的实现类
2014/01/23 PHP
php实现将字符串按照指定距离进行分割的方法
2015/03/14 PHP
Laravel 5框架学习之日期,Mutator 和 Scope
2015/04/08 PHP
PHP实现的构造sql语句类实例
2016/02/03 PHP
详解PHP匿名函数与注意事项
2016/03/29 PHP
PHP延迟静态绑定的深入讲解
2018/04/02 PHP
对laravel in 查询的使用方法详解
2019/10/09 PHP
js 深拷贝函数
2008/12/04 Javascript
jQuery 核心函数以及jQuery对象
2010/03/23 Javascript
jQuery结合CSS制作漂亮的select下拉菜单
2015/05/03 Javascript
js实现精确到秒的倒计时效果
2016/05/29 Javascript
微信小程序开发经验总结(推荐)
2017/01/11 Javascript
js判断手机系统是android还是ios
2017/03/07 Javascript
基于Vue2实现的仿手机QQ单页面应用功能(接入聊天机器人 )
2017/03/30 Javascript
JS中将多个逗号替换为一个逗号的实现代码
2017/06/23 Javascript
在微信小程序里使用watch和computed的方法
2018/08/02 Javascript
vue根据值给予不同class的实例
2018/09/29 Javascript
简单了解node npm cnpm的具体使用方法
2019/02/27 Javascript
Vue中props的详解
2019/05/16 Javascript
基于JavaScript实现简单扫雷游戏
2021/01/02 Javascript
Python中List.index()方法的使用教程
2015/05/20 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
Python面向对象基础入门之设置对象属性
2018/12/11 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
利用Python如何制作贪吃蛇及AI版贪吃蛇详解
2020/08/24 Python
Web页面中八种创建多列等高(等高列布局)的实现技术
2012/12/24 HTML / CSS
CSS3的calc()做响应模式布局的实现方法
2017/09/06 HTML / CSS
高中数学教师求职信
2013/10/30 职场文书
党员的自我评价范文
2014/01/02 职场文书
建筑系毕业生自我鉴定
2014/01/24 职场文书
领导干部整治奢华浪费之风思想汇报
2014/10/07 职场文书
就业意向书范本
2015/05/11 职场文书
民事撤诉申请书范本
2015/05/18 职场文书
单位病假条范文
2015/08/17 职场文书
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技