PHP递归实现无限级分类

在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性。那么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); 

声明:本文为原创文章,helloweba.com和作者拥有版权,如需转载,请注明来源于helloweba.com并保留原文链接:http://www.helloweba.com/view-blog-204.html

时间: 2024-10-09 12:39:24

PHP递归实现无限级分类的相关文章

PHP不使用递归的无限级分类

不用递归实现无限级分类,简单测试了下性能比递归稍好一点点点,但写得太复杂了,还是递归简单方便点 代码: <?php $list = array( array('id'=>1, 'pid'=>0, 'deep'=>0, 'name'=>'test1'), array('id'=>2, 'pid'=>1, 'deep'=>1, 'name'=>'test2'), array('id'=>3, 'pid'=>0, 'deep'=>0, 'n

(实用篇)PHP递归实现无限级分类

在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 递归,简单的说就是一段程序代码的重复调用,当把代码写到一个自定义函数中,将参数等变量保存,函数中重复调用函数,直到达到某个条件才跳出,返回相应的数据. 首先

PHP迭代与递归实现无限级分类

无限级分类是开发中常见的情况,因此本文对常见的无限极分类算法进行总结归纳. 1.循环迭代实现 1 $arr = [ 2 1=>['id'=>1,'name'=>'父1','father'=>NULL], 3 2=>['id'=>2,'name'=>'父2','father'=>NULL], 4 3=>['id'=>3,'name'=>'父3','father'=>NULL], 5 4=>['id'=>4,'name'=&g

PHP_递归实现无限级分类

<?php /** * 递归方法实现无限级别分类 * @param array $list 要生成树形列表的数组[该数组中必须要有主键id 和 父级pid] * @param int $pid=0 父级id * @param int $level=0 缩进次数[用于指定分类名称要缩进的数量] */ function getTree($list,$pid=0,$level=0 ) { // static 表示声明一个静态变量, 静态变量在函数中会一直保存它的值 static $tree = arr

php下利用递归实现无限级分类

<?php //分析 /* 福建省 福州市 龙岩市 广东省 广州市 佛山市 晋江市 江门市 江西省 南昌市 赣州市 宁都县 大余县 信封县 吉安市 cat_id pri parent_id 1 福建省 0 2 福州市 1 3 龙岩市 1 4 广东省 0 5 广州市 4 6 佛山市 4 7 晋江市 4 8 江门市 7 9 江西省 0 10 南昌市 9 11 赣州市 9 12 宁都县 11 13 大余县 11 14 信封县 11 15 吉安市 9 16 */ ?> <?php header(

PHP递归重新排序无限级分类数组

public static function Menus($id,$spac=0){ /* $data = array( 1 => array('id' => 1,'name' => 'name1','pid' => 0), 2 => array('id' => 2,'name' => 'name2','pid' => 0), 3 => array('id' => 3,'name' => 'name3','pid' => 1), 4

mysql无限级分类实现基于汇报关系的信息管理权限

汇报关系和家族族谱的实现类似,采用树的数据结构进行定义,树采用递归进行定义.即要嘛是一个根节点,要嘛是由一个根节点和其子树组成.OA中的汇报关系也采用这种结构(与树稍有不同),除董事长外,其他人有且只有一个非其本人的直接主管,董事长的直接主管和越级主管是其本人.从以上的定义其实可以看出,汇报关系类似树,但又与树并不完全相同.除董事长外,其他汇报关系均是树形结构.树形结构采用递归定义,如采用递归查询是非常耗时的操作.比如以下需求: 1.主管可以看到所有直线下属的绩效信息: 针对以上需求,我们提出三

PHP无限级分类-递归(不推荐)

[http://www.helloweba.com/view-blog-204.html] 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 在一些复杂的系统中,要求对信息栏目进行无限级的分类,以增强系统的灵活性.那么PHP是如何实现无限级分类的呢?我们在本文中使用递归算法并结合mysql数据表实现无限级分类. 递归,简单的说就是一段程序代码的重复调用,当把代码写到一个自定义

php非递归无限级分类.

项目需要.递归无限级分类效率实在太低.理了半天思路写的. 分类越多效率越高. /** * 单次循环返回无限极分类嵌套 * @param array $data 操作的数组 * @param string $columnPri 唯一键名,如果是表则是表的主键 * @param string $columnPid 父ID键名 * @return array */ function region_tree($data, $columnPri, $columnPid) { define('__paren