PHP无限级分类

一、数据格式
$arr = Array
(
    [0] => Array
        (
            [cat_id] => 1
            [cat_name] => 关于我们
            [sort_order] => 0
            [parent_id] => 0
        )

    [1] => Array
        (
            [cat_id] => 2
            [cat_name] => 站内公告
            [sort_order] => 0
            [parent_id] => 0
        )

    [2] => Array
        (
            [cat_id] => 3
            [cat_name] => 促销咨询
            [sort_order] => 0
            [parent_id] => 0
        )

    [3] => Array
        (
            [cat_id] => 4
            [cat_name] => 售前答疑
            [sort_order] => 0
            [parent_id] => 2
        )

    [4] => Array
        (
            [cat_id] => 5
            [cat_name] => 售后答疑
            [sort_order] => 0
            [parent_id] => 2
        )

    [5] => Array
        (
            [cat_id] => 6
            [cat_name] => 企业文化
            [sort_order] => 0
            [parent_id] => 0
        )

    [6] => Array
        (
            [cat_id] => 11
            [cat_name] => 企业发展历程
            [sort_order] => 0
            [parent_id] => 1
        )

    [7] => Array
        (
            [cat_id] => 12
            [cat_name] => 首页公告
            [sort_order] => 0
            [parent_id] => 2
        )

)

二、无限级分类实现

class ArticleCat{
    //筛选分类数据
    public function getCatTree($arr,$id = 0,$lev = 0) {
        $tree = array();
        
        foreach ($arr as $v){
            if ($v['parent_id'] == $id){
                $v['lev'] = $lev;
                $tree[] = $v;
                
                $tree = array_merge($tree,$this->getCatTree($arr,$v['cat_id'],$lev+1));
            }
        }
        return $tree;
    }


}

三、调用方式
$catModel = new ArticleCat();
$catList = $catModel->getCatTree($arr);

四、返回数据格式
$catList = Array
(
    [0] => Array
        (
            [cat_id] => 1
            [cat_name] => 关于我们
            [sort_order] => 0
            [parent_id] => 0
            [lev] => 0
        )

    [1] => Array
        (
            [cat_id] => 11
            [cat_name] => 企业发展历程
            [sort_order] => 0
            [parent_id] => 1
            [lev] => 1
        )

    [2] => Array
        (
            [cat_id] => 2
            [cat_name] => 站内公告
            [sort_order] => 0
            [parent_id] => 0
            [lev] => 0
        )

    [3] => Array
        (
            [cat_id] => 4
            [cat_name] => 售前答疑
            [sort_order] => 0
            [parent_id] => 2
            [lev] => 1
        )

    [4] => Array
        (
            [cat_id] => 5
            [cat_name] => 售后答疑
            [sort_order] => 0
            [parent_id] => 2
            [lev] => 1
        )

    [5] => Array
        (
            [cat_id] => 12
            [cat_name] => 首页公告
            [sort_order] => 0
            [parent_id] => 2
            [lev] => 1
        )

    [6] => Array
        (
            [cat_id] => 3
            [cat_name] => 促销咨询
            [sort_order] => 0
            [parent_id] => 0
            [lev] => 0
        )

    [7] => Array
        (
            [cat_id] => 6
            [cat_name] => 企业文化
            [sort_order] => 0
            [parent_id] => 0
            [lev] => 0
        )

)

五、在前端直接遍历的效果(此处以ThinkPHP模板为例)
<label>文章分类</label>
<select name='cat_id'style="width:345px; height:32px; line-height:32px; border-top:solid 1px #c3ab7d; border-left:solid 1px #c3ab7d; border-right:solid 1px #e7d5ba; border-bottom:solid 1px #e7d5ba; background: rgba(0, 0, 0, 0)  repeat-x scroll 0 0;">
<volist name="catList" id="vo">
	<option value="<{$vo.cat_id}>"><?php echo str_repeat('    ',$vo['lev']);?><{$vo.cat_name}></option>
</volist>
</select>

	   
 

 

posted @ 2017-02-16 22:22  史亚运  阅读(249)  评论(2编辑  收藏  举报