• 用层级关系字段输出无限级分类

    一个字段的巧用
    服务器君一共花费 5.962 ms 进行了 3 次数据库查询,努力地为您提供了这个页面。
    广告很萌的

    前面我们设计了无限级栏目的数据表,那么怎么用呢。

    当时我这几了 parentid 字段,那就可以递归。也有 depth 表示当前栏目的深度,还有 parentid_list 来表示层级关系,所以要输出树状结构的无限栏目方法也多样。下面我们用最简单的方式。

    public function output()
    {
    	$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);
    	
    	while($myrow = $connector -> fetch_array($result))
    	{
    		$data['post'][] = $myrow;
    	}
    	
    	$option = '';
    	foreach ($data['post'] AS $key => $val)
    	{
    		$space = str_repeat( '        ', count ( explode ( ',', $data['post'][$key]['parentid_list'] ) ) - 1 );
    		$option .= '<option value="' . $data['post'][$key]['id'] . '">' . $space . $data['post'][$key]['name'] .' ['.$data['post'][$key]['parentid_list'].']' . '</option>';
    	}
    	
    	$data['str'] = $option;
    	
    	$this->load->view('index', $data);
    }
    

    输出的结果如下:

    关键代码是这句:

    $space = str_repeat( '        ', count ( explode ( ',', $data['post'][$key]['parentid_list'] ) ) - 1 );
    

    原理很简单,看看 str_repeat() 这个函数就了解了。

    str_repeat() 函数把字符串重复指定的次数。语法:str_repeat(string,repeat)。string 是要重复的字符串,repeat 是规定字符串将被重复的次数。必须大于等于 0。

    比如 echo str_repeat(".",13); 会输出 13 个点:.............

    就是把 parentid_list 按逗号分隔成数组,count 出数组元素的个数,根据个数在前面重复加空格而已……

    当然也能用递归,后面会介绍到。

更多 推荐条目

Welcome to NowaMagic Academy!

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

本章最新发布
随机专题
  1. [Python程序设计] 从PHP到Python 3 个条目
  2. [移动开发] Android根基概念Context 8 个条目
  3. [数据结构] 图的定义 1 个条目
  4. [运维管理] 路由器与交换机 4 个条目
  5. [软件工程与项目管理] 浏览器与CSS渲染技巧 2 个条目
  6. [移动开发] Android View注入框架Butter Knife 3 个条目
  7. [移动开发] 从代码角度去认识 Thread 9 个条目
  8. [PHP程序设计] htaccess 设置技巧 6 个条目
  9. [Python程序设计] Django数据库模型 6 个条目
  10. [PHP程序设计] 编程范式初探 3 个条目
  11. [PHP程序设计] CodeIgniter与PHP框架设计 5 个条目
  12. [移动开发] Android布局中的一些常用控件 2 个条目
窗口 -- [协会]