2014-01-14 61 views
0

我遇到了一個問題,我試圖合併2個(或更多!)數組,其中的鍵沒有明確定義,以及我在哪裏正在尋找沒有任何重複。這似乎是一個愚蠢的問題,但我正在努力尋找解決問題的有效方法。讓我來舉例說明:PHP中沒有鍵和沒有重複組合兩個(或更多)數組

// for example, here are some arrays, the last 2 are the same... 
$one = array(1); 
$two = array(2); 
$three = array(2); 

現在,理想情況下,我想「合併」這三個陣列有類似:

array(1, 2); 

使用當前的PHP的能力,這是我到目前爲止已經試過:

// this produces: array(1, 2, 2) 
$merged = array_merge($one, $two, $three); 

// this produces: array(2) 
$merged = $one + $two + $three; 

這兩個都不完全符合我的需要。有什麼明顯的我失蹤了嗎?我真的不想開始循環遍歷每個數組來檢查重複項,然後再將它們添加到合併數組中。

在此先感謝您的任何見解!

回答

1

只是跟進array_mergearray_unique

$merged = array_unique(array_merge($one, $two, $three)); 

注意,在一般情況下,這將產生一個結果,其中鍵不是整數的序列。如果這是一個問題,請在array_values($merged)的基礎上進行重新索引。

如果您正在合併批次項目,並且您希望有大量重複項目,那麼可能值得探索更高效的備選項,但不要擔心它會先發制人。

+0

我在想這個,但是如果我合併到'$ merged'中的每個數組都被加入到'foreach'循環中會發生什麼?每次我想要在另一個數組中合併(可能有幾百個),是否足夠有效地運行'array_unique'?感謝你! :) –

+1

@ChrisKempen:我只是編輯提到這一點。這取決於。您可以通過手動完成所有操作並將輸入**中的項目(作爲鍵和值**)插入臨時,然後將'array_flip'作爲臨時項目以獲得結果來減少浪費。有很多值得注意的地方,但這就是要點。不過,除非你確實可以證明廢物會傷害你,否則我不會擔心。 – Jon

+1

@ChrisKempen:另外,如果您需要逐步更新結果,則無助於減少浪費。 – Jon

相關問題