如何对比数组元素,将第一个数组的新元素添加至第二个数组
实现方案(PHP为例)
核心思路是将数组转换为以元素为键的关联数组,快速判断元素是否存在,完全忽略元素顺序的影响,同时保证操作效率。
具体代码实现
<?php $array1 = ['1','2','7','9']; $array2 = ['7','9','1','2']; // 将array2转为键值对(键为元素值,用于快速查找) $array2Keys = array_flip($array2); // 遍历array1,筛选出array2缺失的元素并添加 foreach ($array1 as $item) { if (!isset($array2Keys[$item])) { $array2[] = $item; $array2Keys[$item] = true; // 同步更新键集合,避免重复添加 } } // 输出结果 print_r($array2); ?>
代码说明
array_flip($array2):把array2的元素转为数组键,判断元素是否存在的时间复杂度降为O(1),比in_array()的O(n)高效得多,适合元素较多的场景。- 遍历过程中,仅当元素不存在于array2时才执行添加操作,完全满足「元素完全相同则不操作」的要求。
- 同步更新键集合,避免array1存在重复元素时,重复添加到array2。
测试场景验证
- 当array1与array2元素完全相同时:遍历无新增操作,array2保持原样。
- 当array1新增元素(比如
['1','2','7','9','6']):遍历到'6'时会自动添加到array2末尾,最终array2变为['7','9','1','2','6'],符合需求。
扩展处理
如果需要允许array2保留重复元素(即array1有重复元素时,array2也同步添加重复项),只需去掉$array2Keys[$item] = true;这一行即可,但通常此类需求默认要求元素唯一,所以当前代码的去重逻辑更通用。
内容的提问来源于stack exchange,提问作者Sergio Ramos
相关产品推荐
相关产品推荐

