前两种自己写的 非常low
$menuArr = M('system_module')->where('visible','1')->select();
//三级为空时,删除二级
foreach ($menuArr as $k=>$v){
if ($v['level'] == 2){
$unset = true;
foreach ($menuArr as $kk=>$vv){
if ($vv['parent_id'] == $v['mod_id']){//如果存在有人的父id为上一级id,则不删除
$unset = false;
}
}
if ($unset){
unset($menuArr[$k]);
}
}
}
//二级为空时删除定级
foreach ($menuArr as $k=>$v){
if ($v['level'] == 1){
$unset = true;
foreach ($menuArr as $kk=>$vv){
if ($vv['parent_id'] == $v['mod_id']){//如果存在有人的父id为上一级id,则不删除
$unset = false;
}
}
if ($unset){
unset($menuArr[$k]);
}
}
}
}
1.分三级查出,三次循环拼入 多此循环性能低
foreach ($menuArr as $k=>$v){
if ($v['level'] == 1){
$top[] = $v;
}elseif ($v['level'] == 2){
$menu[] = $v;
}elseif ($v['level'] == 3){
$module[] = $v;
}
}
foreach ($top as $k=>$v){
foreach ($menu as $k1=>$v1){
if ($v1['parent_id'] == $v['mod_id']){
foreach ($module as $k2=>$v2){
if ($v2['parent_id'] == $v1['mod_id']){
$menu[$k1]['model'][]=$v2;
}
}
$top[$k]['menu'][]=$menu[$k1];
}
}
}
2.分三级查出,每级查出时做拼接
foreach (getMenuArr() as $k=>$v){
if ($v['level'] == 1){
$top[] = $v;
}elseif ($v['level'] == 2){
foreach ($top as $kk=>$vv){
if ($vv['mod_id'] == $v['parent_id']){
$top[$kk]['menu'][] = $v;
}
}
}elseif ($v['level'] == 3){
foreach ($top as $key=>$value){
foreach ($value['menu'] as $kkk=>$vvv){
if ($vvv['mod_id'] == $v['parent_id']){
$top[$key]['menu'][$kkk]['model'][] =$v;
}
}
}
}
}
$this->assign('top',$top);
3.分三级查出,每级查出时其父ID做为映射ID,方便后续拼接
foreach ($cat_list as $val){
if($val['level'] == 2){
$arr[$val['parent_id']][] = $val;
}
if($val['level'] == 3){
$crr[$val['parent_id']][] = $val;
}
if($val['level'] == 1){
$tree[] = $val;
}
}
var_dump($arr);die();
foreach ($arr as $k=>$v){
foreach ($v as $kk=>$vv){
$arr[$k][$kk]['sub_menu'] = empty($crr[$vv['id']]) ? array() : $crr[$vv['id']];
}
}
foreach ($tree as $val){
$val['tmenu'] = empty($arr[$val['id']]) ? array() : $arr[$val['id']];
$result[$val['id']] = $val;
}