这里我就放一个很久之前研究的多级菜单处理方法,这个方法支持无限极分类,有多少级就会返回多少级数组深度。
上代码:
1、递归
//组成树状结构数组:递归
function list_to_tree($data, $pid){
$tree = '';
if (!empty($data)) {
foreach ($data as $k => $v) {
unset($v['region_type']);
if($v['parent_id'] == $pid){
unset($data[$k]);
$v['next'] = getTree($data,$v['region_id']);
if (empty($v['next'])) {
unset($v['next']);
}
$tree[] = $v;
}
}
return $tree;
}
}
print_r(getTree($data,0));这个方法在输出多级数据的时候,很有用,只要找到对应的父id和对应的子id,就会输出你想要的结果,但是呢,众所周知,递归是很吃内存的,能不用就不用,后来,发现了另外一个方法,PHP的引用特性,上代码:
2、引用
// 组成树状结构数组:引用
function list_to_tree($array) {
//第一步 构造数据
$items = array();
foreach ($array as $value) {
$items[$value['region_id']] = $value;
}
//第二部 遍历数据 生成树状结构
$tree = array();
foreach ($items as $key => $value) {
if (isset($items[$value['parent_id']])) {
$items[$value['parent_id']]['son'][] = &$items[$key];
} else {
$tree[] = &$items[$key];
}
}
return $tree;
}这个的效率就高多了,我处理过一个2M大小的数据,用递归耗时67s,用引用耗时才1.5s,高下立判!
没有难的技术,当你弄清它的原理时,你会发现原来如此简单~ 欢迎加群【195474288】讨论
