php array_intersect比array_diff快(附详细的使用说明)
作者:
在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]); 检查更深的维度。
前面要比后者快,在大数组中更为明显。
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]); 检查更深的维度。
您可能感兴趣的文章:
- php natsort内核函数浅析
- php in_array 函数使用说明与in_array需要注意的地方说明
- PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
- PHP内核介绍及扩展开发指南—基础知识
- php数组函数序列之in_array() 查找数组值是否存在
- php数组函数序列之array_combine() - 数组合并函数使用说明
- php数组函数序列之in_array() - 查找数组中是否存在指定值
- php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
- 使用js判断数组中是否包含某一元素(类似于php中的in_array())
- PHP内核探索:变量存储与类型使用说明
- PHP内核探索:变量概述
- php内核解析:PHP中的哈希表
- 2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
- php数组查找函数in_array()、array_search()、array_key_exists()使用实例
- PHP函数in_array()使用详解
- php提示Warning:mysql_fetch_array() expects的解决方法
- PHP内核探索:哈希表碰撞攻击原理
- 深入理解PHP内核(一)
- 深入理解PHP内核(二)之SAPI探究
- 深入php内核之php in array