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

时间:2016-03-08 15:59:43

标签: php loops key

这有点难以解释所以请接受我对标题的错误措辞!

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

这些数组是[key,value]数组。键只是索引,因此它们从0开始计数。$ arrayA和$ arrayB彼此相关,因为key [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!

在整个迭代过程中如何检查?我以为我可以将值存储在循环外的缓冲区/临时数组中,然后检查我之前是否已经使用此组合调用了doSomething()。但我觉得在循环中有一种更优化的方法。我最好的选择是什么?

1 个答案:

答案 0 :(得分:1)

简短解决方案:

$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

显然,只有在您可以使用不在值中的字符(在此示例中为逗号)时,此方法才有效。否则,您必须使用双array_search():如果键匹配,您可以跳过/停止执行。