无限分类是一个很好的分类方法,需要用到三个字段

id pid title 分别是id 父id 分类名称

生成一个无限分类数组,用到了递归,一般开发中分类最多三级,太多也无用处,理论上无限级分类.

function gettree($pid=0,&$result=array(),$spac=0){
    $spac = $spac+2;
    $row = pdo_getall('item',array('pid'=>$pid));
    foreach($row as $v){
        if($v['pid']==0){
            $v['title'] = $v['title'];
        } else{
            $v['title'] = str_repeat('  ',$spac)."|--".$v['title'];
        }


        $result[] = $v;
        gettree($v['id'],$result,$spac);
    }
    return $result;
}

输出分类 传入父类id,默认是从最顶级0开始的,参数2是选中的

function puttree($pid=0,$selected=0){
    $rs = gettree($pid);
    $str='';
    $str .= "<select name='pid'>";
    $str .= '<option value="0">顶级分类</option>';
    foreach($rs as $key=>$val){

        if($val['id'] == $selected){
            $selectedstr = "selected";
        }else{
            $selectedstr = "";
        }
        $str .= "<option $selectedstr value='".$val['id']."'>".$val['title']."</option>";
    }
    $str .= "</select>";
    return $str;
}

根据子类找到上级上上级分类直到顶级为止

function getmenu($cid,&$result=array()){
    //引用数据库连接资源
$row = pdo_get('item',array('id'=>$cid));
    if($row){
        $result[] = $row;
        getmenu($row['pid'],$result);
    }
    //数组顺序倒序
    krsort($result);

    return $result;

}

根据父类查询子类,直到最终子类为止和上面相反

 function get_cid($cid,&$result=array()){
        $row = pdo_getall('item',array('pid'=>$cid));
        if($row){
            foreach($row as $v){
                $result[] = $v;
               get_cid($v['id'],$result);
            }


        }
        return $result;
    }

实际上1,3,4函数比较有用,掌握这几个就掌握了无限分类.

标签: none

评论已关闭