php递归实现无限级分类
发布时间:2016-02-29
在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性。那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类。

递归,简单的说就是一段程序代码的重复调用,当把代码写到一个自定义函数中,将参数等变量保存,函数中重复调用函数,直到达到某个条件才跳出,返回相应的数据。

Mysql: 首先准备一张数据表class,记录商品分类信息。表中有三个字段,id:分类编号,主键自增长;title:分类名称;pid:所属上级分类id。 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; http://s2.sinaimg.cn/mw690/6feaf585td4c9478fe311&690'>

PHP: 根据不同的需求,提供两种不同格式的自定义函数,一种是返回字符串,一种是返回数组,两种函数都使用了递归方法。先看返回字符串格式的函数: include_once("mysql.inc.php");//连接数据库 //递归-返回字符串格式的函数 function get_str($id = 0) { global $conn; global $str; $sql = "select id,title from class where pid= $id"; //echo $sql; $result = mysql_query($sql,$conn); //查询pid的子类的分类 if($result && mysql_affected_rows()){ //如果有子类 $str .= ''; while ($row = mysql_fetch_array($result)) { //循环记录集 $str .= " <*>" . $row<'title'> . " <*>"; //构建字符串 get_str($row<'id'>); //调用get_str(),将记录集中的id参数传入函数中,继续查询下级 } $str .= ''; } return $str; } echo get_str(0); 效果如下: http://s6.sinaimg.cn/mw690/6feaf585td4c937a8ad65&690'>

//返回数组格式函数 function get_array($id=0){ global $conn; $sql = "select id,title from class where pid= $id"; $result = mysql_query($sql,$conn);//查询子类 $arr = array(); if($result && mysql_affected_rows()){//如果有子类 while($rows=mysql_fetch_assoc($result)){ //循环记录集 $rows<'list'> = get_array($rows<'id'>); //调用函数,传入参数,继续查询下级 $arr<> = $rows; //组合数组 } return $arr; } } $list = get_array(0); //调用函数 print_r($list); //输出数组 效果如下: http://s12.sinaimg.cn/mw690/6feaf585td4c93dd5d65b&690'>

如果要输出json格式的数据,则可使用:


echo
json_encode(
$
list); 文章来源
更多文章 进入论坛 我要发帖