加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > PHP > 正文

php array_intersect比array_diff快(附详细的使用说明)

发布时间:2020-05-24 19:34:34 所属栏目:PHP 来源:互联网
导读:在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() 例子
<div class="codetitle"><a style="CURSOR: pointer" data="42705" class="copybut" id="copybut42705" onclick="doCopy('code42705')"> 代码如下:<div class="codebody" id="code42705">
<?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()快五倍
<div class="codetitle"><a style="CURSOR: pointer" data="34419" class="copybut" id="copybut34419" onclick="doCopy('code34419')"> 代码如下:<div class="codebody" id="code34419">
/*

自定义的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","blue");
$array2 = array("green","red");
echo "
"; 
print_r(my_array_intersect($array1,$array2));
echo "
"; 

array_diff — 计算数组的差集


array array_diff ( array $array1,array $ ... ] )
array_diff() 返回一个数组,该数组包括了所有在 array1 中但是不在任何其它参数数组中的值。注意键名保留不变。 #1 array_diff() 例子
<div class="codetitle"><a style="CURSOR: pointer" data="12393" class="copybut" id="copybut12393" onclick="doCopy('code12393')"> 代码如下:<div class="codebody" id="code12393">
<?php
$array1 = array("a" => "green","blue","red");
$array2 = array("b" => "green","red");
$result = array_diff($array1,$array2);
print_r($result);
?>

在 $array1 中多次出现的值一样处理,输出结果为:
<div class="codetitle"><a style="CURSOR: pointer" data="51914" class="copybut" id="copybut51914" onclick="doCopy('code51914')"> 代码如下:<div class="codebody" id="code51914">
Array
(
[1] => blue
)

Note: 两个单元仅在 (string) $elem1 === (string) $elem2 时被认为是相同的。也就是说,当字符串的表达是一样的时候。 Note: 注意本函数只检查了多维数组中的一维。当然可以用 array_diff($array1[0],$array2[0]); 检查更深的维度。

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读