php两种无限分类方法实例
author:一佰互联 2019-04-28   click:195

一、递归方法复制代码 代码如下:$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));