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

如何使用isset()和foreach查找两个不同数组中的唯一值

两个数组取唯一值的解决方案

原有代码问题

  • 逻辑判断错误:isset($arr1[$val2])是判断$val2是否为$arr1的索引键,而非判断$val2是否是$arr1的元素值,和你要判断值是否重合的需求完全不符
  • 嵌套循环导致重复输出:两层循环每次满足条件就直接输出,会触发多次重复打印,自然出现冗余内容
  • 缺少结果过滤逻辑:没有提前对公共值做排除,自然会输出两个数组都存在的元素

最优实现方案(使用PHP内置函数)

PHP已经内置了直接计算数组差集的函数,性能比自定义遍历高很多,也不会出现逻辑错误:

只获取第一个数组独有的值

使用array_diff函数,返回第一个数组中存在、且其他所有参数数组中都不存在的值:

$arr1 = [1,3,7,10,13];
$arr2 = [7,4,1,5,3];
$uniqueInArr1 = array_diff($arr1, $arr2);
// 输出结果:10 13
echo implode(' ', $uniqueInArr1);

获取两个数组各自独有的所有唯一值

分别计算两个数组的差集后合并即可:

$uniqueAll = array_merge(array_diff($arr1, $arr2), array_diff($arr2, $arr1));
// 输出结果:10 13 4 5
echo implode(' ', $uniqueAll);

自定义遍历实现(如果需要自己写逻辑)

如果不使用内置函数,建议先把对照数组的元素转为关联数组的键,用isset做O(1)复杂度的存在判断,避免嵌套循环:

$arr1 = [1,3,7,10,13];
$arr2 = [7,4,1,5,3];
// 把arr2的元素转为键,方便快速判断存在性
$arr2Map = array_flip($arr2);
$result = [];
foreach ($arr1 as $val) {
    // 只保留不在arr2中存在的元素
    if (!isset($arr2Map[$val])) {
        $result[] = $val;
    }
}
// 最后统一输出,不会有重复内容
echo implode(' ', $result);

内容的提问来源于stack exchange,提问作者Gev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 18:09:01