检查 2 个链接数组中的重复值

Check for duplicate values within 2 linked arrays

这有点难以解释,所以请接受我的标题措辞不当!

所以我有两个数组。让我们称它们为 $arrayA 和 $arrayB。

这些数组是 [key, value] 数组。键只是索引,所以它们只是从 0 开始计数。 $arrayA 和 $arrayB 彼此相关,因为两个数组中键 [i] 处的值是相关的。我像这样遍历数组:

foreach ($arrayA as $key => $value) {
    $valueA = $value;
    $valueB = $arrayB[$key];
    doSomething($valueA, $valueB);
}

现在,问题来了。我需要确保我不会使用重复组合调用 doSomething() 方法。例如,我应该能够执行以下调用(当我遍历循环并多次调用 doSomething 时):

doSomething(1, 5);
doSomething(1, 6);
doSomething(2, 5);

但是我不能执行以下操作:

doSomething(1, 5);
doSomething(1, 5); // Duplicate! Stop!

我将如何在整个迭代过程中对此进行检查?我想我可以将值存储在循环外的 buffer/temporary 数组中,然后检查我之前是否已经用这个组合调用过 doSomething() 。但我有一种感觉,在循环中有一种更优化的方法来做到这一点。我的最佳路线是什么?

简短的解决方案:

$processed = array();

foreach( $arrayA as $key => $value )
{
    $valueA = $value;
    $valueB = $arrayB[$key];

    if( in_array( "$valueA,$valueB", $processed ) ) continue;
    doSomething( $valueA, $valueB );
    $processed[] = "$valueA,$valueB";
}

通过这种方式,如果值对已经被处理,则跳过它。 否则,如果您想停止执行,请将 continue 替换为 break

显然,只有当您可以使用不在值中的字符(在本例中为逗号)时,此方法才有效。否则,你必须使用double array_search():如果键匹配,你可以skip/stop执行。