同事遇到一个一组菜单数据中找到三层菜单名称一样的情况下拼接二级菜单的问题.
比如数据是这样的
最终结果应该是这样
他采用了好多次循环来解决这个问题,先循环拿到三级菜单的列表形成一个set集合,然后循环列表判断一下是不是在里面重复了,如果是则拿出来添加二级菜单名称追加到一个新的列表中,否则直接追加到新列表中.
这个实现思路有点过于复杂了.
我这里用PHP快速的验证了一下我的想法
只循环外层数组一次,将L3不断的追加进一个数组,然后判断这个位置是不是出现过重复,如果出现了,将这个索引设定为需要改变标题.
代码如下:
调用如下:
全部代码
<?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"; } }
标签:菜单,value,拼接,l3,key,array,三层,change From: https://www.cnblogs.com/lizhaoyao/p/16599518.html