You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:39:29