貼一個無限極分類的算法,作個筆記。垃圾的csdnphp
<?php namespace app\index\controller; class Index { public function study(){ $city_arr = [ ['id'=>1,'name'=>'山東省','pid'=>0], ['id'=>2,'name'=>'河北省','pid'=>0], ['id'=>3,'name'=>'煙臺市','pid'=>1], ['id'=>4,'name'=>'威海市','pid'=>1], ['id'=>5,'name'=>'牟平區','pid'=>3], ['id'=>6,'name'=>'桃村鎮','pid'=>7], ['id'=>7,'name'=>'棲霞市','pid'=>3], ['id'=>8,'name'=>'唐家泊鎮','pid'=>7], ['id'=>9,'name'=>'後野村','pid'=>8], ['id'=>10,'name'=>'田裏村','pid'=>8] ]; $city_f = $this->make_tree($city_arr); return json($city_f); } public function make_tree($arr,$mkey='id',$pkey='pid',$level=0,$ckey='child'){ $tree = []; $in_arr = []; //提取索引到主鍵中 foreach ($arr as $key=>$value){ $in_arr[$value[$mkey]] = $value; } //pid爲0的直接返回 不爲零則找到上級,放在上級目錄下面 foreach ($in_arr as $key=>$value){ if($value[$pkey] == $level){ $tree[] = &$in_arr[$key]; }else{ $in_arr[$value[$pkey]][$ckey][] = &$in_arr[$key]; } } return $tree; } }