|
本帖最后由 gxcnvip 于 2012-3-13 21:35 编辑
如下数据表,当父ID(parent_id)为1的数据循环不了 li 呢?现在循环的结果是这样:
<li>
分类一一
<ul>
<li>分类一一一</li>
</ul>
分类一二
<ul>
<li>分类一一一11</li>
</ul>
</li>
我想循环为下列样子:
<li>
分类一一
<ul>
<li>分类一一一</li>
</ul>
</li>
<li>
分类一二
<ul>
<li>分类一一一11</li>
</ul>
</li>
刚才又折腾了一会,现在是多了个<li></li>标签,
怎么修改?请高手帮忙。。。谢谢了
CREATE TABLE `yn_category` (
`id` int(11) NOT NULL auto_increment,
`parent_id` int(11) NOT NULL,
`name` varchar(255) NOT NULL,
`sort` int(11) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;
INSERT INTO `yn_category` VALUES (1, 0, '分类一', 0);
INSERT INTO `yn_category` VALUES (2, 1, '分类一一', 0);
INSERT INTO `yn_category` VALUES (3, 1, '分类一二', 0);
INSERT INTO `yn_category` VALUES (4, 2, '分类一一一', 0);
INSERT INTO `yn_category` VALUES (5, 4, '分类一二4', 0);
INSERT INTO `yn_category` VALUES (6, 3, '分类一一一11', 0);
Controller:
public function index(){
$this->db->order_by('id', 'DESC');
$r = $this->db->get('category')->result_array();
$t = $this->find_child($r);
foreach($r as $k=>$v){
if($v['parent_id'] == 0){
echo $this->foo(array($t[$v['id']]));
}
}
}
function find_child($ar, $id='id', $parent_id='parent_id') {
foreach($ar as $v) $t[$v[$id]] = $v;
foreach ($t as $k => $item){
if( $item[$parent_id] ) {
$t[$item[$parent_id]]['child'][$item[$id]] =& $t[$k];
}
}
return $t;
}
function foo($ar) {
$r = '';
$r = '<li>';
foreach($ar as $k=>$v) {
$r .= $v['name'];
if(isset($v['child']))
{
$r .= '<ul>' ;
$r .= $this->foo($v['child']);
$r .= '</ul>';
}
$r .= '</li>';
$r = '<li>';
}
return $r;
}
|
|