• 用 PHP 實現無限分類的好方法

    0
    PHP HTML C/C++ Go 16680 次瀏覽

    效果:

    計算機操作系統
    |-Linux 系統
    |–Linux相關網站
    |—Linuxpig.com
    |—Linux.org
    |-Windows 系統
    開源
    |-open-open.com

     

    數據的存儲結構是這樣的:

    id,pid,name

    解釋:

    id為自身編號,pid為父分類的編號(如果根則為0),name 為分類名稱

     

    無限分類的思想:

    也就是用一個數組來表示一個樹形的結構的方法,基本思路是結果數組 tree 中,所有根元素放到 tree[0] 中。二級欄目(根元素的子)放到 tree[1] 中,第n層次的元素的子元素放到 tree[n] 當中。

     

    具體實現:

    1,"pid"=>0,"name"=>"計算機操作系統");
    $array[] = array("id"=>2,"pid"=>0,"name"=>"探險");
    $array[] = array("id"=>3,"pid"=>1,"name"=>"Linux 系統");
    $array[] = array("id"=>4,"pid"=>1,"name"=>"Windows 系統");
    $array[] = array("id"=>5,"pid"=>3,"name"=>"Linux相關網站");
    $array[] = array("id"=>6,"pid"=>5,"name"=>"Linuxpig.com");
    $array[] = array("id"=>7,"pid"=>5,"name"=>"Linux.org");
    $array[] = array("id"=>8,"pid"=>2,"name"=>"52risk.com");
    
    showCategory($array);
    
    function showCategory($array){
        $tree = array();
        if( $array ){
            foreach ( $array as $v ){
                $pid = $v['pid'];
                $list = @$tree[$pid] ?$tree[$pid] : array();
                array_push( $list, $v );
                $tree[$pid] = $list;
            }
        }
    
        //遍歷輸出根分類
        foreach($tree[0] as $k=>$v)
        {
            echo "$v[name]
    ";
            //遍歷輸出根分類相應的子分類
            if($tree[$v['id']]) drawTree($tree[$v['id']],$tree,0);
            echo "
    "; } } function drawTree($arr,$tree,$level) { $level++; $prefix = str_pad("|",$level+1,'-',STR_PAD_RIGHT); foreach($arr as $k2=>$v2) { echo "$prefix$v2[name] "; if(isset($tree[$v2['id']])) drawTree($tree[$v2['id']],$tree,$level); } } ?>
    具體項目中可能樣式和數據來源需要調整。

    轉自:http://www.linuxpig.com/2011/01/php-endless-category/

    相似問題

    相關經驗

    相關資訊

    相關文檔

  • sesese色