同事在开发过程中遇到一个这样的需求,从数据库中获取到如下的数组:
注意看数组中用红色线框框住的部分,这几个部分中数组的第一个键值都相同。现在要求将所有这样的子数组进行"合并"。合并之后要求重复的键值对要去除。比如上面这个数组,正确处理之后应该得到下面的结果:
下面的代码提供了完整的解决方案:
简单讲解一下思路:
1)先获取到所有子数组的键名存储到$keyArr中;
2)去除数组keyArr中重复的部分;
3)"翻转"数组keyArr将内容存储在keyArr_flip中,以备后续使用;
4)获取keyArr数组中的键名存储在数组$indexArr中;
5) 循环遍历待分析的数组(只遍历第一层),如果键名在$indexArr中,直接将结果存储到数组$t中,否则先根据这个子数组的第一个键值对的值通过之前的翻转数组keyArr_flip找到应该归并的数组索引,之后进行归并和去重。
注意:程序中注释的部分只是为了说明数组函数的用法,不代表程序运行的结果!