一個好用的php 實現無限分類的方法

 

效果:

計算機操作系統
|-Linux 系統
|–Linux相關網站
|—Linuxpig.com
|—Linux.org
|-Windows 系統
探險
|-52risk.com

 

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

id,pid,name

解釋:

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

 

無限分類的思想:

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

 

具體實現:

<?php
/**
* @author: huliang
* @description: 無限分類示例
**/
header('Content-type: text/html; charset=gb2312');

//模擬數據格式,實際應用中可能數據來自於數據庫
$array[] = array("id"=>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"=>"<a href='http://linuxpig.com' target='_blank'>Linuxpig.com</a>");
$array[] = array("id"=>7,"pid"=>5,"name"=>"<a href='http://linux.org' target='_blank'>Linux.org</a>");
$array[] = array("id"=>8,"pid"=>2,"name"=>"<a href='http://52risk.com' target='_blank'>52risk.com</a>");

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]<br />";
        //遍歷輸出根分類相應的子分類
        if($tree[$v['id']]) drawTree($tree[$v['id']],$tree,0);
        echo "<div style='height:10px;'></div>";
    }
}

function drawTree($arr,$tree,$level)
{
    $level++;
    $prefix = str_pad("|",$level+1,'-',STR_PAD_RIGHT);
    foreach($arr as $k2=>$v2)
    {
        echo "$prefix$v2[name]<br />";
        if(isset($tree[$v2['id']])) drawTree($tree[$v2['id']],$tree,$level);

    }
}
?>

 

具體項目中可能樣式和數據來源需要調整,有什麼問題聯繫我一起研究。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章