这有点难以解释所以请接受我对标题的错误措辞!
所以我有两个数组。让我们称它们为$ 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()。但我觉得在循环中有一种更优化的方法。我最好的选择是什么?
答案 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()
:如果键匹配,您可以跳过/停止执行。