前面我们设计了无限级栏目的数据表,那么怎么用呢。
当时我这几了 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 出数组元素的个数,根据个数在前面重复加空格而已……
当然也能用递归,后面会介绍到。
现代魔法 推荐于 2013-02-27 10:23