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二维数组的去重问题解析
Jul 17 PHP
关于尾递归的使用详解
May 02 PHP
php生成二维码的几种方式整理及使用实例
Jun 03 PHP
php实现的漂亮分页方法
Apr 17 PHP
php之Smarty模板使用方法示例详解
Jul 08 PHP
浅析THINKPHP的addAll支持的最大数据量
Feb 03 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
Mar 18 PHP
浅析Yii2集成富文本编辑器redactor实例教程
Apr 25 PHP
详谈phpAdmin修改密码后拒绝访问的问题
Apr 03 PHP
总结一些PHP中好用但又容易忽略的小知识
Jun 02 PHP
Laravel框架查询构造器 CURD操作示例
Sep 04 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
Feb 10 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函数ip2long转换IP时数值太大产生负数的解决方法
2013/06/06 PHP
PHP多态代码实例
2015/06/26 PHP
PHP-X系列教程之内置函数的使用示例
2017/10/16 PHP
改进:论坛UBB代码自动插入方式
2006/12/22 Javascript
基于jquery的模态div层弹出效果
2010/08/21 Javascript
De facto standard 世界上不可思议的事实标准
2010/08/29 Javascript
Jquery命名冲突解决的五种方案分享
2012/03/16 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
JS实现自动变化的导航菜单效果代码
2015/09/09 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
Bootstrap和Java分页实例第二篇
2016/12/23 Javascript
javascript基础知识之html5轮播图实例讲解(44)
2017/02/17 Javascript
JavaScript获取tr td 的三种方式全面总结(推荐)
2017/08/15 Javascript
JS同步、异步、延迟加载的方法
2018/05/05 Javascript
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
基于html+css+js实现简易计算器代码实例
2020/02/28 Javascript
如何使用 vue-cli 创建模板项目
2020/11/19 Vue.js
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
Python中str is not callable问题详解及解决办法
2017/02/10 Python
python如何实现int函数的方法示例
2018/02/19 Python
python实现RabbitMQ的消息队列的示例代码
2018/11/08 Python
PyQt5 QTableView设置某一列不可编辑的方法
2019/06/25 Python
在Python中利用pickle保存变量的实例
2019/12/30 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
python用Tkinter做自己的中文代码编辑器
2020/09/07 Python
python 星号(*)的多种用途
2020/09/21 Python
在html页面中取得session中的值的方法
2020/08/11 HTML / CSS
linux面试题参考答案(5)
2016/11/05 面试题
应用化学专业职业生涯规划书
2014/01/22 职场文书
荷叶圆圆教学反思
2014/02/01 职场文书
股权投资意向书
2014/04/01 职场文书
大学活动总结格式
2014/04/29 职场文书
考试诚信承诺书
2014/05/23 职场文书
团日活动总结模板
2014/06/25 职场文书
2014年前台接待工作总结
2014/12/05 职场文书
Django与数据库交互的实现
2021/06/03 Python