三级或者无限级分类时数组拼装

前两种自己写的 非常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;
}

你可能感兴趣的:(三级或者无限级分类时数组拼装)