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