检查 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执行。
这有点难以解释,所以请接受我的标题措辞不当!
所以我有两个数组。让我们称它们为 $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执行。