这里我就放一个很久之前研究的多级菜单处理方法,这个方法支持无限极分类,有多少级就会返回多少级数组深度。
上代码:
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,高下立判!
没有难的技术,当你弄清它的原理时,你会发现原来如此简单~ 欢迎加群【536501561】讨论