在php中,使用 array_intersect 求两个数组的交集比使用 array_diff 求同样两个数组的并集要快。
如果要求数组 $a 与数组 $b 的差集的个数,应该使用 count($a) - count(array_intersect($a, $b)),而不要用 count(array_diff($a, $b));
前面要比后者快,在大数组中更为明显。
1.array_intersect函数 
array array_intersect ( array $array1 , array $array2 [, array $ ... ] ) 
array_intersect() 返回一个数组,该数组包含了所有在 array1 中也同时出现在所有其它参数数组中的值。注意键名保留不变。 
#1 array_intersect() 例子 
 代码如下: 
 green, red, blue); 
$array2 = array(b => green, yellow, red); 
$result = array_intersect($array1, $array2); 
?> 
这使得 $result 成为: 
array 
( 
[a] => green 
[0] => red 
)
2.自我实现的array_intersect()函数比php原函数array_intersect()快五倍 
 代码如下: 
/** 
* 
* 自定义的array_intersect 
* 如果求的是一维数组的交集这个函数比系统的array_intersect快5倍 
* 
* @param array $arr1 
* @param array $arr2 
* @author liubotao 2010-12-13上午11:40:20 
* 
*/ 
function my_array_intersect($arr1,$arr2) 
{ 
for($i=0;$i{ 
$temp[]=$arr1[$i]; 
} 
for($i=0;$i{ 
$temp[]=$arr2[$i]; 
} 
sort($temp); 
$get=array(); 
for($i=0;$i{ 
if($temp[$i]==$temp[$i+1]) 
$get[]=$temp[$i]; 
} 
return $get; 
} 
$array1 = array(green, red, blue); 
$array2 = array(green, yellow, red); 
echo ; 
print_r(my_array_intersect($array1, $array2)); 
echo 
;
array_diff — 计算数组的差集
array array_diff ( array $array1 , array $array2 [, array $ ... ] ) 
array_diff() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保留不变。
#1 array_diff() 例子 
 代码如下: 
 green, red, blue, red); 
$array2 = array(b => green, yellow, red); 
$result = array_diff($array1, $array2); 
print_r($result); 
?>
在 $array1 中多次出现的值一样处理,输出结果为: 
 代码如下: 
array 
( 
[1] => blue 
)
note: 两个单元仅在 (string) $elem1 === (string) $elem2 时被认为是相同的。也就是说,当字符串的表达是一样的时候。
note: 注意本函数只检查了多维数组中的一维。当然可以用 array_diff($array1[0], $array2[0]); 检查更深的维度。
   
 
   