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() 例子

  

复制代码 代码如下:

  <?php

  $array1 = array("a" => "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<sizeof($arr1);$i++)

  {

  $temp[]=$arr1[$i];

  }

  for($i=0;$i<sizeof($arr1);$i++)

  {

  $temp[]=$arr2[$i];

  }

  sort($temp);

  $get=array();

  for($i=0;$i<sizeof($temp);$i++)

  {

  if($temp[$i]==$temp[$i+1])

  $get[]=$temp[$i];

  }

  return $get;

  }

  $array1 = array("green", "red", "blue");

  $array2 = array("green", "yellow", "red");

  echo "<pre>";

  print_r(my_array_intersect($array1, $array2));

  echo "<pre/>";

  array_diff — 计算数组的差集

  

  array array_diff ( array $array1 , array $array2 [, array $ ... ] )

  array_diff() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保留不变。

  #1 array_diff() 例子

  

复制代码 代码如下:

  <?php

  $array1 = array("a" => "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]); 检查更深的维度。