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 curl_setopt()函数实例代码与参数分析
Jun 02 PHP
关于PHP递归算法和应用方法介绍
Apr 15 PHP
解析posix与perl标准的正则表达式区别
Jun 17 PHP
php 备份数据库代码(生成word,excel,json,xml,sql)
Jun 23 PHP
使用PHP编写的SVN类
Jul 18 PHP
PHP数据库链接类(PDO+Access)实例分享
Dec 05 PHP
php中http与https跨域共享session的解决方法
Dec 20 PHP
php实现表单多按钮提交action的处理方法
Oct 24 PHP
修改PHP脚本使WordPress拦截垃圾评论的方法示例
Dec 10 PHP
YII Framework框架教程之国际化实现方法
Mar 14 PHP
Yii 框架使用Forms操作详解
May 18 PHP
thinkphp5.1 框架钩子和行为用法实例分析
May 25 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实现的AES加密、解密封装类与用法示例
2018/08/02 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
JavaScript delete 属性的使用
2009/10/08 Javascript
javascript 操作Word和Excel的实现代码
2009/10/26 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
js 操作select与option(示例讲解)
2013/12/20 Javascript
js实现div在页面拖动效果
2016/05/04 Javascript
BootstrapTable+KnockoutJS自定义T4模板快速生成增删改查页面
2016/08/01 Javascript
Web 开发中Ajax的Session 超时处理方法
2017/01/19 Javascript
Vue.2.0.5过渡效果使用技巧
2017/03/16 Javascript
JavaScript屏蔽Backspace键的实现代码
2017/11/02 Javascript
vue脚手架搭建过程图解
2018/06/06 Javascript
layui实现鼠标移动到单元格上显示数据的方法
2019/09/11 Javascript
vue + elementUI实现省市县三级联动的方法示例
2019/10/29 Javascript
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
Python 时间处理datetime实例
2008/09/06 Python
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
2020/04/18 Python
深入理解Django-Signals信号量
2019/02/19 Python
Python figure参数及subplot子图绘制代码
2020/04/18 Python
python中pyplot基础图标函数整理
2020/11/10 Python
详解Scrapy Redis入门实战
2020/11/18 Python
详解Canvas事件绑定
2018/06/27 HTML / CSS
HTML5中的Article和Section元素认识及使用
2013/03/22 HTML / CSS
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
国贸类专业毕业生的求职信分享
2013/12/08 职场文书
英语自荐信范文
2013/12/11 职场文书
大学生文员专业个人求职信范文
2014/01/05 职场文书
小学师德师风演讲稿
2014/09/02 职场文书
贷款担保书
2015/01/20 职场文书
圆明园观后感
2015/06/03 职场文书
运动会通讯稿300字
2015/07/20 职场文书
班级管理经验交流材料
2015/11/02 职场文书
协议书格式模板
2016/03/24 职场文书
Vue Element UI自定义描述列表组件
2021/05/18 Vue.js
Windows Server 2019 域控制器安装图文教程
2022/04/28 Servers