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 中但是不在任何其它参数数组中的值。注意键名保留不变。
<?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数组查找函数in_array()、array_search()、array_key_exists()使用实例
php在数组中查找指定值是否存在的方法有很多,记得很久以前我一直都是傻傻的用foreach循环来查找的,下面我主要分享一下用php内置的三个数组函数来查找指定值是否存在于数组中,这三个数组分别是 in_array(),array_search(),array_key_exists(). 首先分别介绍一下各自的定义与作用 in_array(value,array,type) 该函数的作用是在数组array中搜索指定的value值,type是可选参数,如果设置该参数为 true ,则检查搜索的数据与
-
php natsort内核函数浅析第1/2页
官方手册(http://us.php.net/manual/en/function.natsort.php) 复制代码 代码如下: bool natsort ( array &$array ) This function implements a sort algorithm that orders alphanumeric strings in the way a human being would while maintaining key/value associations. This
-
PHP内核探索:变量存储与类型使用说明
先回答前面一节的那个问题吧. 复制代码 代码如下: <?php $foo = 10; $bar = 20; function change() { global $foo; //echo '函数内部$foo = '.$foo.'<br />'; //如果不把$bar定义为global变量,函数体内是不能访问$bar的 $bar = 0; $foo++; } change(); echo $foo
-
2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题
但是如果数组比较大的时候,性能就会下降,运行的就会久一点,那如果针对在大数组情况下做优化呢,下面说两种方法(都是通过自定义函数来实现): 1.数组key与value翻转,通过isset判断key是否存在于数组中 复制代码 代码如下: /** * in_array is too slow when array is large */public static function inArray($item, $array) { $flipArray = array_flip($array);
-
php数组函数序列之in_array() 查找数组值是否存在
in_array() 定义和用法 in_array() 函数在数组中搜索给定的值. 语法 in_array(value,array,type) 参数 描述 value 必需.规定要在数组搜索的值. array 必需.规定要搜索的数组. type 可选.如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同. 说明 如果给定的值 value 存在于数组 array 中则返回 true.如果第三个参数设置为 true,函数只有在元素存在于数组中且数据类型与给定值相同时才返回 true.
-
深入php内核之php in array
先给大家介绍php in array函数基本知识热热身. 定义和用法 in_array() 函数在数组中搜索给定的值. 语法 in_array(value,array,type) 参数 描述 value 必需.规定要在数组搜索的值. array 必需.规定要搜索的数组. type 可选.如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同. 说明 如果给定的值 value 存在于数组 array 中则返回 true.如果第三个参数设置为 true,函数只有在元素存在于数组中且数据
-
PHP内核探索:哈希表碰撞攻击原理
下面通过图文并茂的方式给大家展示PHP内核探索:哈希表碰撞攻击原理. 最近哈希表碰撞攻击(Hashtable collisions as DOS attack)的话题不断被提起,各种语言纷纷中招.本文结合PHP内核源码,聊一聊这种攻击的原理及实现. 哈希表碰撞攻击的基本原理 哈希表是一种查找效率极高的数据结构,很多语言都在内部实现了哈希表.PHP中的哈希表是一种极为重要的数据结构,不但用于表示Array数据类型,还在Zend虚拟机内部用于存储上下文环境信息(执行上下文的变量及函数均使用哈希表结
-
php数组函数序列之array_intersect() 返回两个或多个数组的交集数组
array_intersect() 定义和用法 array_intersect() 函数返回两个或多个数组的交集数组. 结果数组包含了所有在被比较数组中,也同时出现在所有其他参数数组中的值,键名保留不变. 注释:仅有值用于比较. 语法 array_intersect(array1,array2,array3...) 参数 描述 array1 必需.与其他数组进行比较的第一个数组. array2 必需.与第一个数组进行比较的数组. array3 可选.与第一个数组进行比较的数组.可以有多个.例子
-
php数组函数序列之in_array() - 查找数组中是否存在指定值
in_array()定义和用法 in_array() 函数查找数组中是否存在指定值. 语法 in_array(value,array,type)参数 描述 value 必需.规定要在数组搜索的值. array 必需.规定要搜索的数组. type 可选.如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同. 说明 如果给定的值 value 存在于数组 array 中则返回 true.如果第三个参数设置为 true,函数只有在元素存在于数组中且数据类型与给定值相同时才返回 true.
-
PHP内核介绍及扩展开发指南—基础知识
一. 基础知识 本章简要介绍一些Zend引擎的内部机制,这些知识和Extensions密切相关,同时也可以帮助我们写出更加高效的PHP代码. 1.1 PHP变量的存储 1.1.1 zval结构 Zend使用zval结构来存储PHP变量的值,该结构如下所示: 复制代码 代码如下: typedef union _zvalue_value { long lval; /* long value */ double dval; /* double value */ struct { char *val;
-
php提示Warning:mysql_fetch_array() expects的解决方法
本文实例讲述了php提示Warning mysql_fetch_array() expects的解决方法,分享给大家供大家参考.具体分析如下: 在mysql数据库连接时碰到Warning: mysql_fetch_array() expects ...错误提示,根据我的经验这个是sql返回的query为空了,我们没有加己判断直接使用了. mysql_fetch_array()函数导致的,下面我们一起来看问题解决方案,我的代码如下: 复制代码 代码如下: include("conn.php&quo
-
使用js判断数组中是否包含某一元素(类似于php中的in_array())
while case速度最快 复制代码 代码如下: function contains(arr, str) { var i = arr.length; while (i--) { if (arr[i] === str) { return true; } } return false;}
-
php数组函数序列之array_combine() - 数组合并函数使用说明
array_combine() 定义和用法 array_combine() 函数通过合并两个数组来创建一个新数组,其中的一个数组是键名,另一个数组的值为键值. 如果其中一个数组为空,或者两个数组的元素个数不同,则该函数返回 false. 语法 array_combine(array1,array2) 参数 描述 array1 必需.规定键名. array2 必需.规定值. 提示和注释 注释:两个参数必须有相同数目的元素. 例子 复制代码 代码如下: <?php $a1=array("a&q
-
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
返回一个交集共有元素的数组(只是数组值得比较).array_intersect_assoc()函数是将键值和值绑定,一起比较交集部分.array_intersect_key()函数是将两个数组的键值进行比较,返回键值交集的数组.但实际应用中也遇到了一些小问题,正如下: 实例: 复制代码 代码如下: <?PHP $array = array("red"=>"Red","green"=>"red4","
-
PHP函数in_array()使用详解
PHP有一个系统函数is_array()可以判断一个值是否在数组中. 语法如下: 复制代码 代码如下: in_array(value,array,type) return boolen 参数说明: value :要搜索的值 array : 被搜索的数组 type : 类型,true全等 ,false非全等(默认) 示例一:普通使用 代码: 复制代码 代码如下: $str = 1; $arr = array(1,3,5,7,9); $boolvalue = in_array($str,$a
-
php内核解析:PHP中的哈希表
PHP中使用最为频繁的数据类型非字符串和数组莫属,PHP比较容易上手也得益于非常灵活的数组类型. 在开始详细介绍这些数据类型之前有必要介绍一下哈希表(HashTable). 哈希表是PHP实现中尤为关键的数据结构. 哈希表在实践中使用的非常广泛,例如编译器通常会维护的一个符号表来保存标记,很多高级语言中也显式的支持哈希表. 哈希表通常提供查找(Search),插入(Insert),删除(Delete)等操作,这些操作在最坏的情况下和链表的性能一样为O(n). 不过通常并不会这么坏,合理设计的哈希
-
深入理解PHP内核(一)
PHP作为一门简单而强大的语言,能够提供很多Web适用的语言特性.从实践出发,继弱类型变量原理探究后,本文继续带领大家深入理解php内核. 最近,和一个网友交流的时候,给我提了一个非常奇怪的问题.那就是,在一个运算中,加了一个引用之后,发现性能慢了一万倍.在我的脑海里面,引用是一个非常容易出错的问题,特别是PHP里面的引用,有非常多的陷阱.因为,以前专门研究过这一块PHP的源代码,所以,我可以比较清晰的解析引用到底是怎么一回事,希望,读了我这篇文章,能彻底理解这个问题.如果,有任何疑问,或者有一
-
php in_array 函数使用说明与in_array需要注意的地方说明
in_array (PHP 4, PHP 5) in_array - 检查数组中是否存在某个值 说明 复制代码 代码如下: bool in_array ( mixed $needle , array $haystack [, bool $strict ] ) 在 haystack 中搜索 needle ,如果找到则返回 TRUE,否则返回 FALSE. 如果第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和 haystack 中的相同.
-
PHP内核探索:变量概述
现代编程语言中的基本元素主要有:变量,流程控制接口,函数等等.我能否不使用变量来编写程序呢? 这显然是可以的,例如: 复制代码 代码如下: <?php echo "Hello AndHM";?> 这个程序很简单,输出一个字符串内容. 就和我们仅仅使用二进制也能编程一样,不使用变量也能完成大部分的工作,不使用变量我们的程序将丧失极大的灵活性, 变量可以让我们将值存储起来,以便在程序的其他地方使用,或者通过计算保存新的值. 变量具有三个基本特性: 名称.变量的标示符.就像
-
深入理解PHP内核(二)之SAPI探究
在上篇文章给大家介绍了深入了解PHP内核(一),相信大家通过本文多多少少都学到些知识吧,关于php内核知识继续关注本篇文章. SAPI是Server Application Programming Interface(服务器应用编程接口)的缩写.PHP通过SAPI提供了一组接口,供应用和PHP内核之间进行数据交互. 简单的讲,就像函数的输入和输出一样,我们通过Linux命令行执行一段PHP代码,本质是Linux的Shell通过PHP的SAPI传入一组参数,Zend引擎执行后,返回给shell,由
随机推荐
- javascript面向对象编程代码
- vue.js动态数据绑定学习笔记
- Java小程序求圆的周长和面积实例 原创
- php cout<<的一点看法
- CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
- PHPCMS2008广告模板SQL注入漏洞修复
- JSP 开发之Servlet解决网页缓存问题
- Mysql带And关键字的多条件查询语句
- phonegap教程使用jspdf库在应用中生成pdf文件(pdf生成方法)
- asp下多个域名后缀同时查询的域名查询系统
- Java web基础学习之开发环境篇(详解)
- JS与jQ读取xml文件的方法
- Windows中利用计划任务实现自动备份文件
- Android性能优化以及数据优化方法
- 禁用Tab键JS代码兼容Firefox和IE
- Thinkjs3新手入门之如何使用静态资源目录
- WPF自定义实现IP地址输入控件
- Android自定义控件实现球赛比分条效果
- 如何避免PHP实例代码中的一些坏代码
- Vue项目中使用jsonp抓取跨域数据的方法