贴一个无限极分类的算法,做个笔记。垃圾的csdn
<?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;
}
}