2016-03-08 57 views
0

这是很难解释的,所以请接受我的一个标题的坏字眼!因此我有两个数组。让我们称他们为$ arrayA和$ arrayB。这些数组是[键值]数组。这些键只是索引,所以它们只从0开始计数。$ arrayA和$ arrayB都相互关联,因为两个数组中的键[i]中的值是相关的。通过这样的阵列我循环:检查2个连接阵列中的重复值

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

简短的解决方案:

$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():如果键匹配,您可以跳过/停止执行。

+0

感谢您的回应,我现在只是回家,但明天就会测试它,并让您知道它是怎么回事!谢谢。我将在当时编辑/添加新评论,以提供丰富的回复,而不是此。 – Conor

+0

很好,工作得很好,谢谢。 – Conor