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 相关文章推荐
实时抓取YAHOO股票报价的代码
Oct 09 PHP
落伍首发 php+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码
Dec 16 PHP
php中截取字符串支持utf-8
Jan 18 PHP
PHP 事务处理数据实现代码
May 13 PHP
php中导出数据到excel时数字变为科学计数的解决方法
Feb 03 PHP
php中使用session防止用户非法登录后台的方法
Jan 27 PHP
PHP语法小结之基础和变量
Nov 22 PHP
CI框架常用方法小结
May 17 PHP
PHP扩展框架之Yaf框架的安装与使用
May 18 PHP
php 5.4 全新的代码复用Trait详解
Jan 05 PHP
laravel 去掉index.php伪静态的操作方法
Oct 12 PHP
PHP常见的序列化与反序列化操作实例分析
Oct 28 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的Yii框架使用中的一些错误解决方法与建议
2015/08/21 PHP
PHP计算数组中值的和与乘积的方法(array_sum与array_product函数)
2016/04/01 PHP
PHP简单读取xml文件的方法示例
2017/04/20 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
2017/08/30 PHP
JavaScript中圆括号()和方括号[]的特殊用法疑问解答
2013/08/06 Javascript
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
关于javascript模块加载技术的一些思考
2014/11/28 Javascript
JavaScript中Date对象的常用方法示例
2015/10/24 Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
2016/06/07 Javascript
jQuery回到顶部的代码
2016/07/09 Javascript
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
Vue组件间通信方法总结(父子组件、兄弟组件及祖先后代组件间)
2019/04/17 Javascript
富文本编辑器vue2-editor实现全屏功能
2019/05/26 Javascript
vuex state中的数组变化监听实例
2019/11/06 Javascript
微信小程序实现转盘抽奖
2020/09/21 Javascript
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
利用python批量给云主机配置安全组的方法教程
2017/06/21 Python
python 3.5实现检测路由器流量并写入txt的方法实例
2017/12/17 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
django数据模型(Model)的字段类型解析
2019/12/25 Python
Python打印特殊符号及对应编码解析
2020/05/07 Python
工程师必须了解的LRU缓存淘汰算法以及python实现过程
2020/10/15 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
2020/12/29 Python
Hello Molly美国:女性时尚在线
2019/08/26 全球购物
weblogic面试题
2016/03/07 面试题
计算机个人求职信范例
2014/01/24 职场文书
应聘编辑自荐信范文
2014/03/12 职场文书
中国入世承诺
2014/04/01 职场文书
2014报到证办理个人委托书
2014/10/08 职场文书
基层党支部整改方案
2014/10/25 职场文书
环保宣传语大全
2015/07/13 职场文书
小学教师教学反思
2016/02/24 职场文书
vue中的可拖拽宽度div的实现示例
2022/04/08 Vue.js