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)
猜你喜欢
- ·Yii入门教程之Yii安装及hello world
- ·php求正负数数组中连续元素最大值示例
- ·PHP SEO优化之URL优化方法
- ·PHP获取当前执行php文件名的代码
- ·自动把纯文本转换成Web页面的php代码
- ·PHP 如何利用phpexcel导入数据库
- ·php封装json通信接口详解及实例
- ·Thinkphp框架中D方法与M方法的区别
- ·PHP取整数函数常用的四种方法小结
- ·PHP文件打开、关闭、写入的判断与执行代码
- ·PHP入门经历和学习过程分享
- ·php摘要生成函数(无乱码)
- ·PHP FOR MYSQL 代码生成助手(根据Mysq...
- ·PHP批量生成静态HTML的简单原理和方法
- ·PHP 配置后台登录以及模板引入
- ·Phpbean路由转发的php代码
热门推荐
- ·PHP读取CURL模拟登录时生成Cookie文件的方法
- ·PHP新手上路(十)
- ·模仿OSO的论坛(五)
- ·Thinkphp结合ajaxFileUpload实现异步图片传输示例
- ·用PHP生成静态HTML速度快类库
- ·php连接mssql的一些相关经验及注意事项
- ·PHP 5.5 创建和验证哈希最简单的方法详解
- ·php在线生成ico文件的代码
- ·div li的多行多列 无刷新分页示例代码
- ·PHP解耦的三重境界(浅谈服务容器)
- ·本地机apache配置基于域名的虚拟主机详解
- ·PHP仿博客园 个人博客(2) 数据库增添改删
- ·CI框架学习笔记(一) - 环境安装、基本术语和框架流程
- ·那些年一起学习的PHP(二)
- ·php用户注册页面利用js进行表单验证具体实例
本月排行
最近更新
- ·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问题解决方法