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性能优化准备篇图解PEAR安装
Dec 05 PHP
PHP递归返回值时出现的问题解决办法
Feb 19 PHP
解析ajax事件的调用顺序
Jun 17 PHP
深入php中var_dump方法的使用详解
Jun 24 PHP
php获取文件内容最后一行示例
Jan 09 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
Oct 30 PHP
thinkphp特殊标签用法概述
Nov 24 PHP
配置php.ini实现PHP文件上传功能
Nov 27 PHP
Yii CDBCriteria常用方法实例小结
Jan 19 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
Apr 24 PHP
PHPUnit测试私有属性和方法功能示例
Jun 12 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增删改查示例自己写的demo
2013/09/04 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
2014/03/18 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
PHP中函数gzuncompress无法使用的解决方法
2017/03/02 PHP
php类自动装载、链式操作、魔术方法实现代码
2017/07/23 PHP
javascript 触发事件列表 比较不错
2009/09/03 Javascript
javascript 学习笔记(一)DOM基本操作
2011/04/08 Javascript
删除条目时弹出的确认对话框
2014/06/05 Javascript
jQuery实现防止提交按钮被双击的方法
2015/03/24 Javascript
jQuery实现仿腾讯视频列表分页效果的方法
2015/08/07 Javascript
jquery轮播的实现方式 附完整实例
2016/07/28 Javascript
AngularJS基础 ng-submit 指令简单示例
2016/08/03 Javascript
jQuery Ajax使用FormData对象上传文件的方法
2016/09/07 Javascript
jQuery Ajax传值到Servlet出现乱码问题的解决方法
2016/10/09 Javascript
WebPack基础知识详解
2017/01/16 Javascript
解决微信小程序防止无法回到主页的问题
2018/09/28 Javascript
vue实现短信验证码登录功能(流程详解)
2019/12/10 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
vue导入.md文件的步骤(markdown转HTML)
2020/12/31 Vue.js
[34:39]DOTA2上海特级锦标赛主赛事日 - 4 败者组第四轮#1COL VS EG第二局
2016/03/05 DOTA
使用Python中的cookielib模拟登录网站
2015/04/09 Python
Python+微信接口实现运维报警
2016/08/27 Python
Python切换pip安装源的方法详解
2016/11/18 Python
Python+tkinter使用40行代码实现计算器功能
2018/01/30 Python
python计算两个地址之间的距离方法
2018/06/09 Python
Django实现登录随机验证码的示例代码
2018/06/20 Python
tensorflow 中对数组元素的操作方法
2018/07/27 Python
python实现对服务器脚本敏感信息的加密解密功能
2019/08/13 Python
Python实现自动签到脚本功能
2020/08/20 Python
小学教师自我鉴定
2013/11/07 职场文书
艺术设计专业个人求职信范文
2013/12/11 职场文书
大三学年自我鉴定范文(3篇)
2014/09/28 职场文书
装饰施工员岗位职责
2015/04/11 职场文书
公司放假通知范文
2015/04/14 职场文书
如何写新闻稿
2015/07/18 职场文书
浅谈Python列表嵌套字典转化的问题
2021/04/07 Python