首页 > 其他分享 >一组菜单数据中找到三层菜单名称一样的情况下拼接二级菜单的问题

一组菜单数据中找到三层菜单名称一样的情况下拼接二级菜单的问题

时间:2022-10-07 17:09:59浏览次数:49  
标签:菜单 value 拼接 l3 key need array 三层 change

同事遇到一个一组菜单数据中找到三层菜单名称一样的情况下拼接二级菜单的问题.

比如数据是这样的

一组菜单数据中找到三层菜单名称一样的情况下拼接二级菜单的问题_数组

 

 最终结果应该是这样

一组菜单数据中找到三层菜单名称一样的情况下拼接二级菜单的问题_数组_02

他采用了好多次循环来解决这个问题,先循环拿到三级菜单的列表形成一个set集合,然后循环列表判断一下是不是在里面重复了,如果是则拿出来添加二级菜单名称追加到一个新的列表中,否则直接追加到新列表中.

这个实现思路有点过于复杂了.

我这里用PHP快速的验证了一下我的想法

只循环外层数组一次,将L3不断的追加进一个数组,然后判断这个位置是不是出现过重复,如果出现了,将这个索引设定为需要改变标题.

代码如下:

一组菜单数据中找到三层菜单名称一样的情况下拼接二级菜单的问题_数组_03

  调用如下:

一组菜单数据中找到三层菜单名称一样的情况下拼接二级菜单的问题_数据_04

 全部代码

<?php

$array = [
['l2' => 'testl2', 'l3' => 'testl3'],
['l2' => 'testl2', 'l3' => 'testl4'],
['l2' => 'testl3', 'l3' => 'testl5'],
['l2' => 'testl4', 'l3' => 'testl6'],
['l2' => 'testl5', 'l3' => 'testl4'],
['l2' => 'testl6', 'l3' => 'testl7'],
['l2' => 'testl7', 'l3' => 'testl8'],
['l2' => 'testl1', 'l3' => 'testl3'],
];

function get_five_item(array $array = [])
{
$set_list = [];
$need_change_key = [];
foreach ($array as $key => $value) {
$array[$key]['need_change'] = false;
$is_in_set = in_array($value['l3'], $set_list) ? array_search($value['l3'], $set_list) : false;
if ($is_in_set !== false) {
$need_change_key[] = $is_in_set;
$need_change_key[] = $key;
} else {
$set_list[$key] = $value['l3'];
}
if ($key == count($array) - 1) {
foreach ($need_change_key as $change_key) {
$array[$change_key]['need_change'] = true;
}
}
}
return $array;
}

$array = get_five_item($array);
foreach ($array as $key => $value) {
if ($value['need_change']) {
echo $value['l2'] . '--'. $value['l3'] . "\r\n";
}else{
echo $value['l3'] . "\r\n";
}
}

 -----------------------------------后续更新-------------------------------------------

今天思考了一下,代码完全可以简化这样写

function get_five_item(array $array = [])
{
$hash_list = [];
foreach ($array as $key => $value) {
$array[$key]['need_change'] = false;
if (isset($hash_list[$value['l3']])) {
$first_item_key = $hash_list[$value['l3']];
$array[$first_item_key]['need_change'] = true;
$array[$key]['need_change'] = true;
}else {
$hash_list[$value['l3']] = $key;
}
}
return $array;
}

简单清晰,太方便了,以l3作为key不就知道到底是不是重复了嘛,如果重复,把这个第一次出现的元素和我自己都设定为need_change为true即可.

输出效果一样的

一组菜单数据中找到三层菜单名称一样的情况下拼接二级菜单的问题_二级菜单_05

 



标签:菜单,value,拼接,l3,key,need,array,三层,change
From: https://blog.51cto.com/u_15470226/5734613

相关文章

  • Vue 里,多级菜单要如何设计才显得专业?
    老生常谈了!虽然我们是Java猿,但是写起来前端代码也不含糊!今天我想来和大家聊聊这个前端的动态菜单,要如何设计才显得专业!还是以我们的TienChin项目为例,大家一起来看看。先......
  • 最优雅的Java字符串拼接是哪种方式?
    titleshortTitlecategorytagdescriptionhead最优雅的Java字符串拼接是哪种方式?Java字符串拼接Java核心数组&字符串Java程序员进阶之路,小白......
  • JavaScript水平滚动菜单切换
         完整代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><met......
  • Python 注册菜单
    我们看到下面的示例图是在右键文件夹上查看菜单,带有两级的菜单选项。需要使用管理员权限运行因为右键菜单需要注册表信息,打开注册表需要管理员权限UAC,所以在执行命令过......
  • ImGUI 1.87 绘制D3D外部菜单
    ImGUI它是与平台无关的C++轻量级跨平台图形界面库,没有任何第三方依赖,可以将ImGUI的源码直接加到项目中使用,该框架通常会配合特定的D3Dx9等图形开发工具......
  • 权限控制菜单
    由于不同的用户拥有不同的权限,所以在前端页面左侧侧边栏中,当用户拥有指定的权限时,才显示指定的子菜单做1个监听器,监听到用户认证成功后,则获取该用户拥有的权限,重新封装1个Sy......
  • IDEA 插件开发(一):菜单及气泡通知
    开发工具开发工具使用IntellijIDEA,官网下载地址:https://www.jetbrains.com/idea/download/other.html推荐使用2020.3.4社区版(Community),原因如下:免费开源,在开发插件......
  • 拼接Json数据可以直接提交到AB框架Rest服务端(主从表)
    //=============================================================================== let_this=this letsalesorderdata=_this.params _this.salesorder.a......
  • 面试题 01.09. 字符串轮转(拼接)
    面试题01.09.字符串轮转(拼接)方法1就是二重循环暴力,为了节省空间可以利用取模的思想。时间复杂度:方法2就是用两倍,然后find是否为其子串即可。时间复杂度:......
  • vue3动态路由及菜单
    一般来说,前端项目中的路由,很有可能是需要动态注册的。因为菜单可能在管理系统中维护,还跟权限绑定,用户登录以后,需要动态展示菜单。菜单往往跟路由挂钩,因此,路由需要动态注册。......