2015-02-12 92 views
0

檢查數組中的值是否存在所有值是一種快速且最便宜的方法。數組檢查所有值是否存在

讓說我有一個數組

$a = array(1,2,3,4,5,6); 

我想匹配它陣列

$b = array(6,5,1,3,2,4) 
    $c = array(1,9,2,3,4,5) 
    $d = array(6,5,4,3,2,1) 
    $e = array(1,2,3,4,5,6,7) 
    $f = array(2,3,4,1,5,6) 
    ..... 
etc, etc 

在上述$ A將匹配$ B和$ F,因爲這些值是相同的,儘管不在相同的指數。

現在我知道我可以使用foreach/in_array/array_search等等,並遍歷每一個循環,並嘗試匹配的值。如果數組的大小增加以及數組的數量,那麼這可能會非常快速地變得非常昂貴。我可能有100萬到200萬的那些陣列,然後以上述方式循環播放這些將是一個表演惡夢。

我的問題是達到這個目標的最好方法是什麼。你們會怎麼做呢?任何想法都會有所幫助。謝謝

編輯 正如我在下面的評論中提到的,我不是在尋找被認爲是重複的問題中給出的答案。我想有O(1)解決方案,而不是n^2。那裏的解決方案不會幫助我。我想我需要把這個分開,或者把它分成幾個陣列等等。想象一下1-2百萬個陣列,現在想象有三億個陣列。該解決方案不會擴展。

+0

您排除的foreach?那麼,沒有循環......? – Debflav 2015-02-12 08:33:20

+0

也許array_diff函數? – Maris 2015-02-12 08:34:15

+0

我看着這個解決方案http://stackoverflow.com/questions/7542694/in-array-multiple-values,但我不知道如果性能會更好 – Autolycus 2015-02-12 08:35:31

回答

0

我覺得這個功能可以幫助您:

array_intersect($array1, $array2); or array_diff($array1, $array2) 

and count($array2) 

在下一步如果爲空或元素,你可以看。

你也可以檢查與性能:

$start = microtime(true); 
// Your script goes here 
$end = microtime(true); 
$time = number_format(($end - $start), 11); 
echo 'This page loaded in ', $time, ' seconds'; 
+0

是啊,這是我在我的評論上面添加的解決方案,但這仍然不能幫助我想出如何不這樣做的野蠻行爲。我希望在分裂和征服等方面有所作爲 – Autolycus 2015-02-12 08:49:13

+0

我沒有看到你的解決方案,我找出了它自己。 – Maris 2015-02-12 08:50:46

+0

任何如何,我編輯的問題。你的解決方案不會爲我擴展 – Autolycus 2015-02-12 08:54:31