function generateTree($data){
$items = array();
foreach($data as $v){
$items[$v['auth_id']] = $v;
}
$tree = array();
foreach($items as $k => $item){
if(isset($items[$item['auth_pid']])){
$items[$item['auth_pid']]['son'][] = &$items[$k];
}else{
$tree[] = &$items[$k];
}
}
return $tree;
}
整个方法大体分成两个部分
第一部分是
$items = array();
foreach($data as $v){
$items[$v['auth_id']] = $v;
}
这一段应该是很通俗的,就是构建一个新的数组,新数组的key值是自己的主键id值
至于为什么要特地多一次遍历来将数组的KEY值重构,这里就是第二部分的巧妙之处了
$tree = array();
foreach($items as $k => $item){
if(isset($items[$item['auth_pid']])){
$items[$item['auth_pid']]['son'][] = &$items[$k];
}else{
$tree[] = &$items[$k];
}
}
return $tree;
之后就是自己跑一遍,理清思路