2010-11-29 3 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가 더 나은 작업을 수행하는 몇 가지 방법 때문에이 대답에 반대하고 싶다. 그러나 나는 정확한 것을 생각할 수 없다. 명성은 이제 PHP devs에게 array_diff를 더 빠르게 만들라고 말합니다. – Sparr

6

:

<?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 
) 

이하는 array1의 모든 항목을 포함한 배열을 돌려줍니다 아니 중 하나에 선물 다른 배열.

관련 문제