• 用递归方法输出无限级分类

    如何设计递归函数
    服务器君一共花费 1411.861 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    前面小节我们介绍了用数据库的层级关系字段输出无限级分类,但是这不是一个常用的方法。更常用的方法是使用 parentid 字段,递归出这个无限级分类。比如 WordPress 等很多CMS就是使用这种方法的。

    假设有这样的一个三级分类,家用电器 -> 大家电 -> 冰箱出来了。如果我们要查找“冰箱”这类商品,我们先点击家用电器,然后再点击大家电就可以查出来了,也就是说我们可以通过祖父类一级一级地往下找,反 过来我们只要知道一个子类的父类,就可以把它查找出来了。这样我们在设计数据库时就可以多设计一个父类id的字段就可以实现无限分类的功能了。

    我们可以设计这么一个函数:

    public function getCategories()
    {
    	$this->load->helper('url');
    	$connector = nmdb::get_class_nmdb($this -> db_host, $this -> db_user, $this -> db_password, $this -> db_database);
    	
    	$query = "SELECT * FROM categories ORDER BY parentid_list";
    	$result = $connector -> query($query);
    	
    	global $arr;   //声明$arr为全局变量才可在函数里引用。  
    	while($myrow = $connector -> fetch_array($result))
    	{
    		$arr[] = $myrow;
    	}
    	
    	$this -> recursion(0);
    	
    	//$this->load->view('index', $data);
    }
    
    public function recursion($fid=0)
    {
    	//echo 'fid:'.$fid.' ';
    	global $arr;
    	for($i=0; $i < count($arr); $i++)
    	{       
    		//对每个分类进行循环。 
    		if($arr[$i]['parentid'] == $fid){         
    			//$arr[$i]['parentid'] 表示第 $i+1 个分类的 fid 的值。开始 $fid=0,也就是把 fid=0 的分类输出来。  
    			//$arr[$i]['name'] 表示第 $i+1 个分类的 name 的值。  
    			echo $arr[$i]['name'].' ['.$arr[$i]['parentid_list'].']<br />'; 
    			//$arr[$i]['id'] 表示第 $i+1 个分类的 id 的值。进行递归,也就是把自己的 id 作为 fid 参数把自己的子类再循环出来。
    			$this -> recursion($arr[$i]['id']);   
    		}
    	}
    }
    

    程序的运行结果:

    图书 [1]
    科技 [1,2]
    计算机/互联网 [1,2,3]
    医学 [1,2,4]
    自然与科学 [1,2,5]
    家用电器 [11]
    厨房电器 [11,12]
    电饭锅 [11,12,13]
    大家电 [11,14]
    冰箱 [11,14,15]
    电脑办公 [6]
    电脑整机 [6,7]
    服务器 [6,7,10]
    笔记本 [6,7,8]
    平板电脑 [6,7,9]
    

    具体的解释可参看程序中的注释。

更多 推荐条目

Welcome to NowaMagic Academy!

现代魔法 推荐于 2013-02-27 10:23   

本章最新发布
随机专题
  1. [Python程序设计] urls.py设置技巧 8 个条目
  2. [智力开发与知识管理] 整体性学习步骤 9 个条目
  3. [C语言程序设计] 结构体基本知识 1 个条目
  4. [搜索引擎优化] 百度搜索引擎优化指南 3 个条目
  5. [Linux操作系统] CentOS上使用EPEL Repository 2 个条目
  6. [PHP程序设计] PHP与Stream流 5 个条目
  7. [PHP程序设计] PHP数组探索 4 个条目
  8. [移动开发] Android Studio的使用技巧 4 个条目
  9. [Python程序设计] Python Web部署的背景知识 9 个条目
  10. [数据库技术] MySQL常用自带函数 3 个条目
  11. [C语言程序设计] C语言里的全局变量 2 个条目
  12. [Python程序设计] Tornado 服务器环境配置 3 个条目
窗口 -- [八点]