2010-11-29 21 views

cevap

12

array_diff açık cevabı, ancak en verimli şekilde istedi beri, burada benim makinede

$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); 

baskılar bir sınav daha var

0.67 
0.03 

Çok basit döngü ile karma tabanlı bir arama, array_diff'den yaklaşık 20 kat daha hızlıdır.

+0

Lanet olsun iyisin! :) +1 – Trufa

+0

Bellek kullanımı veya array_diff'in işlemi daha iyi gerçekleştirmesi için bir yoldan dolayı bu cevaba itiraz etmek istiyorum ... ama doğru bir şey düşünemiyorum. Şimdi Kudos, php devs'in array_diff'i daha hızlı hale getirmesini söyleyin. – Sparr

6

:

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

print_r($result); 
?> 

Çıkışlar:

Array 
(
    [1] => blue 
) 

tüm dizi1 girişlerini içeren bir dizi döndürür 'dan herhangi birinde mevcut değil diğer diziler.

İlgili konular