2010-11-29 12 views

答えて

12

array_diffは明白な答えですが、最も効率的な方法を求めてきたことから、ここでは私のマシン上

$big = range(1, 90000); 
$remove = range(500, 600); 

$ts = microtime(true); 
$result = array_diff($big, $remove); 
printf("%.2f\n", microtime(true) - $ts); 

$ts = microtime(true); 
$map = array_flip($remove); 
$result = array(); 
foreach($big as $e) 
    if(!isset($map[$e])) 
     $result[] = $e; 
printf("%.2f\n", microtime(true) - $ts); 

プリント

0.67 
0.03 

とそう単純なループテストですハッシュベースのルックアップはarray_diffより約20倍高速です。

+0

あなたはいいですね! :) +1 – Trufa

+0

私はメモリの使用やarray_diffがより良い操作を実行する何らかの方法のためにこの答えに反対します...しかし、私は何か正確なことを考えることはできません。 Kudos、今すぐarray_diffを速くするようphp devsに伝えてください。 – Sparr

6

manualではarray_dif()このexapleを与える:

<?php 
$array1 = array("a" => "green", "red", "blue", "red"); 
$array2 = array("b" => "green", "yellow", "red"); 
$result = array_diff($array1, $array2); 

print_r($result); 
?> 

出力:

Array 
(
    [1] => blue 
) 

である配列1からすべての のエントリを含む配列を返します。 が存在しない他の配列。

関連する問題