PHP递归实现无限级分类 2017-04-24 来源:网络 字号:大 中 小 我要评论 收藏本文
在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性。那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类。
在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性。那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类。 递归,简单的说就是一段程序代码的重复调用,当把代码写到一个自定义函数中,将参数等变量保存,函数中重复调用函数,直到达到某个条件才跳出,返回相应的数据。 Mysql首先我们准备一张数据表class,记录商品分类信息。表中有三个字段,id:分类编号,主键自增长;title:分类名称;pid:所属上级分类id。 class表结构: CREATE TABLE IF NOT EXISTS `class` ( `id` mediumint(6) NOT NULL AUTO_INCREMENT, `title` varchar(30) NOT NULL, `pid` mediumint(6) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 插入数据后,如图: PHP根据不同的需求,我们提供两种不同格式的自定义函数,一种是返回字符串,一种是返回数组,两种函数都使用了递归方法。先看返回字符串格式的函数: function get_str($id = 0) { global $str; $sql = "select id,title from class where pid= $id"; $result = mysql_query($sql);//查询pid的子类的分类 if($result && mysql_affected_rows()){//如果有子类 $str .= '<ul>'; while ($row = mysql_fetch_array($result)) { //循环记录集 $str .= "<li>" . $row['id'] . "--" . $row['title'] . "</li>"; //构建字符串 get_str($row['id']); //调用get_str(),将记录集中的id参数传入函数中,继续查询下级 } $str .= '</ul>'; } return $str; } 以上函数get_str()通过递归,不断查询下级分类,并最终返回字符串,大家可以根据项目需求修改其中的str,最终生成一个无限分级列表: include_once('connect.php'); //连接数据库,connect.php文件自己写一个啊 echo get_str(0); //输出无限级分类 效果如: 接着我们来看返回数组格式的函数,一样要使用递归: function get_array($id=0){ $sql = "select id,title from class where pid= $id"; $result = mysql_query($sql);//查询子类 $arr = array(); if($result && mysql_affected_rows()){//如果有子类 while($rows=mysql_fetch_assoc($result)){ //循环记录集 $rows['list'] = get_array($rows['id']); //调用函数,传入参数,继续查询下级 $arr[] = $rows; //组合数组 } return $arr; } } 函数get_array()返回了数组,这是我们期待的,所以笔者推荐使用get_array()得到数组,这样一来,我们可以对数组进行任意操作,比如我们可以将数组转换成json格式的数据传给前端页面,前端页面可以通过解析json数据灵活展示分类信息。比如树形结构的分类列表,下拉分类列表等。 include_once('connect.php'); //连接数据库 $list = get_array(0); //调用函数 print_r($list); //输出数组 输出效果如: 如果要输出json格式的数据,则可使用: echo json_encode($list); |
相关热词搜索:递归
上一篇:PHP改进计算字符串相似度的函数similar_text()、levenshtein()
下一篇:最后一页
看完本文,您的心情是?
评论排行
- ·如何清除DNS缓存 使用命令清理dns缓存方法(2)
- ·Win8.1升级Win10遇到错误代码0xc190010...(1)
- ·Windows RT 8.1 Update 3九月发布 ...(0)
- ·如何将ubuntu安装到U盘实现即插即用(0)
- ·微软否认Xbox One有远程关闭开关(0)
- ·Surface Book详细拆解:千万不要自己动手修(0)
- ·WIN10免费升级正版手册(5分钟读懂WIN10...(0)
- ·你的今日头条账号为什么会被封?(0)
- ·win7电脑怎么翻墙看国外的网站?(0)
- ·shell脚本运行5秒后自动退出的代码(0)
- ·jsp 不支持EL表达式,解决办法(0)
- ·table合并单元格与img图片铺满整个td的html(0)
- ·Mac OS X 系统备份指南(0)
- ·Shell脚本注释写法(0)
- ·windows8激活码、序列号、激活密钥、激...(0)
- ·从一个不错的留言本弄的mysql数据库操作类(0)
- ·PHP漏洞全解(详细介绍)(0)
- ·phpBB BBcode处理的漏洞(0)
- ·安装Win10技术预览版有风险吗?win10预...(0)
- ·基于mysql的论坛(6)(0)
猜你喜欢
- ·PHP下对字符串的递增运算代码
- ·PHP中mysqli_affected_rows作用行数返回值...
- ·一个模仿oso的php论坛程序源码(之三)第...
- ·PHP写MySQL数据 实现代码
- ·玩转虚拟域名◎+ .
- ·PHP递归调用的小技巧讲解
- ·php中文验证码实现示例分享
- ·php的日期处理函数及uchome的function_co...
- ·PHP中call_user_func_array回调函数的用法...
- ·PHP、Nginx、Apache中禁止网页被iframe引...
- ·将RTF格式的文件转成HTML并在网页中显示的...
- ·php仿QQ验证码的实例分析
- ·深入分析php之面向对象
- ·php代码中使用换行及(\n或\r\n和br)的应用
- ·通过缓存数据库结果提高PHP性能的原理介绍
- ·php中目录,文件操作详谈
热门推荐
本月排行
最近更新
- ·PHP递归实现无限级分类
- ·PHP改进计算字符串相似度的函数similar_text()、levenshtein()
- ·PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
- ·PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
- ·PHP错误Warning: Cannot modify header information - headers already sent by解决方法
- ·PHP正则替换函数preg_replace和preg_replace_callback使用总结
- ·PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
- ·CodeIgniter错误mysql_connect(): No such file or directory解决方法
- ·PHP JSON出错:Cannot use object of type stdClass as array解决方法
- ·PHP遍历目录函数opendir()、readdir()、closedir()、rewinddir()总结
- ·phpmyadmin出现Cannot start session without errors问题解决方法
- ·Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
- ·PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
- ·php中使用session_set_save_handler()函数把session保存到MySQL数据库实例
- ·PHP错误Parse error: syntax error, unexpected end of file in test.php on line 12解决方法
- ·thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
- ·浅析application/x-www-form-urlencoded和multipart/form-data的区别
- ·PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
- ·PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
- ·Fatal error: session_start(): Failed to initialize storage module: files问题解决方法