PHP数组去重合并:移除重复值保留差异值并输出指定结果
解决PHP多数组去重合并(保留首次出现值及原键)
没问题,我来帮你搞定这个需求!你需要合并多个PHP数组,移除重复的值(只保留值第一次出现时的键值对),同时保留所有不重复的键值对,最终得到指定格式的数组。
实现思路
核心逻辑是按顺序遍历每个数组,记录已经出现过的值,遇到新值时就保留其原键和值,重复值直接跳过。这样既保证了去重,又保留了每个值首次出现的原始键名。
完整代码示例
// 定义你的原始数组 $array1 = array(0 => 'Likes', 7 => 'Frind', 8 => 'USA'); $array2 = array(0 => 'USA', 5 => 'Lools'); $array3 = array(6 => 'USA', 12 => 'Awesome'); // 初始化结果数组和已见值记录数组 $result = []; $seenValues = []; // 按顺序遍历所有输入数组 foreach ([$array1, $array2, $array3] as $currentArray) { // 遍历当前数组的每个键值对 foreach ($currentArray as $key => $value) { // 如果该值未出现过,就保留键值对并记录值 if (!in_array($value, $seenValues)) { $result[$key] = $value; $seenValues[] = $value; } } } // 输出最终结果 print_r($result);
运行结果
执行上述代码后,你会得到期望的输出:
Array ( [0] => Likes [7] => Frind [8] => USA [5] => Lools [12] => Awesome )
注意事项
- 这个方案会严格保留值第一次出现时的键,后续相同值的键会被忽略(比如第二个数组里的键0对应USA,因为USA已经在第一个数组的键8出现过,所以不会被加入结果)。
- 如果你的数组很大,
in_array的效率可能偏低,此时可以改用$seenValues作为关联数组(用值做键),判断时用isset($seenValues[$value]),这样查找速度会更快。优化后的代码片段如下:
$result = []; $seenValues = []; foreach ([$array1, $array2, $array3] as $currentArray) { foreach ($currentArray as $key => $value) { if (!isset($seenValues[$value])) { $result[$key] = $value; $seenValues[$value] = true; // 用值作为键标记已出现 } } }
内容的提问来源于stack exchange,提问作者Bijan Zand
相关产品推荐
相关产品推荐

