2016-03-08 50 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