Welcome 微信登录

首页 / 网页编程 / PHP / php两种无限分类方法实例

一、递归方法
复制代码 代码如下:
$items = array(
array("id"=>1,"pid"=>0,"name"=>"一级11"),
array("id"=>2,"pid"=>0,"name"=>"一级12"),
array("id"=>3,"pid"=>1,"name"=>"二级21"),
array("id"=>4,"pid"=>3,"name"=>"三级31"),
array("id"=>5,"pid"=>1,"name"=>"二级22"),
array("id"=>6,"pid"=>3,"name"=>"三级32"),
array("id"=>7,"pid"=>6,"name"=>"四级41"),
);
$i = 0;
function formatTree($arr, $pid = 0){
$tree = array();
$temp = array();
global $i;
if($arr){
foreach($arr as $k=>$v){
if($v["pid"] == $pid){//
$temp = formatTree($arr, $v["id"]);
$temp && $v["son"] = $temp;
$tree[] = $v;
}
}
}
return $tree;
}
print_r(formatTree($items));

二、非递归方法
复制代码 代码如下:
function genTree($items) {
    $tree = array(); //格式化好的树
    foreach ($items as $item)
        if (isset($items[$item["pid"]])){
            $items[$item["pid"]]["son"][] = &$items[$item["id"]];
        }
        else{
            $tree[] = &$items[$item["id"]];
        }
    return $tree;
}
$items = array(
    1 => array("id" => 1, "pid" => 0, "name" => "一级11"),
    2 => array("id" => 2, "pid" => 1, "name" => "二级21"),
    3 => array("id" => 3, "pid" => 1, "name" => "二级23"),
    4 => array("id" => 4, "pid" => 9, "name" => "三级31"),
    5 => array("id" => 5, "pid" => 4, "name" => "四级43"),
    6 => array("id" => 6, "pid" => 9, "name" => "三级32"),
    7 => array("id" => 7, "pid" => 4, "name" => "四级41"),
    8 => array("id" => 8, "pid" => 4, "name" => "四级42"),
    9 => array("id" => 9, "pid" => 1, "name" => "二级25"),
    10 => array("id" => 10, "pid" => 11, "name" => "二级22"),
    11 => array("id" => 11, "pid" => 0, "name" => "一级12"),
    12 => array("id" => 12, "pid" => 11, "name" => "二级24"),
    13 => array("id" => 13, "pid" => 4, "name" => "四级44"),
    14 => array("id" => 14, "pid" => 1, "name" => "二级26"),
    15 => array("id" => 15, "pid" => 8, "name" => "五级51"),
    16 => array("id" => 16, "pid" => 8, "name" => "五级52"),
    17 => array("id" => 17, "pid" => 8, "name" => "五级53"),
    18 => array("id" => 18, "pid" => 16, "name" => "六级64"),
);
print_r(genTree($items));