2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题

PHP中in_array()函数的深度解析与高效使用指南 本文深入分析PHP中in_array()函数的性能与最佳实践。作为数组查找的核心函数,in_array()采用O(n)线性搜索,在大数据场景下性能显著下降。文章对比了松散与严格类型比较的差异,揭示了常见类型陷阱,并提出高效替代方案:小数组直接使用in_array();中型数组启用严格模式;大型数组推荐array_flip()+isset()组合(提升100倍性能);巨型数组建议采用专业存储方案。同时提供了白名单验证、去重等典型应用场景,帮助开发者根据数据规模智能选择最优策略,平衡性能与开发效率。 阅读详情
大家可能都用过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);
    return isset($flipArray[$item]);
}

大家可能也会问为什么不用 array_key_exists 来做判断二用isset呢? 下面看下array_key_exists() 与 isset() 的对比:
isset()对于数组中为NULL的值不会返回TRUE,而array_key_exists()会。
复制代码代码如下:
<?php
$search_array = array('first' => null, 'second' => 4);

// returns false
isset($search_array['first']);

// returns true
array_key_exists('first', $search_array);
?>


2.用implode连接,直接用strpos判断

用implode函数+逗号连起来,直接用strpos判断。php里面字符串取位置速度非常快,尤其是在大数据量的情况下。不过需要注意的是首尾都要加”,” ,这样比较严谨。如: ,user1,user2,user3, 查找的时候,查,user1,。还有strpos要用!== false,因为第一个会返回0。示例如下:

复制代码代码如下:
/**
 * in_array is too slow when array is large
 */
public static function inArray($item, $array) {
    $str = implode(',', $array);
    $str = ',' . $str . ',';
    $item = ',' . $item . ',';
    return false !== strpos($item, $str) ? true : false;
}





转自:http://www.jb51.net/article/48811.htm

PHP中in_array()函数用法详解 in_array()函数是PHP中常用的数组函数之一,用于在一个数组中搜索指定的值,并返回结果是否存在于数组中。上述代码将输出"数组中包含apple"和"数组中不包含pear",因为$fruits数组包含"apple",但不包含"pear"。除了返回布尔值,in_array()函数还可以返回匹配元素的键名。上述代码将输出"数组中不包含严格匹配的值",因为"2"是一个字符串,而$numbers数组中的元素均为整数。上述代码将输出"数组中包含banana,键名为1",因为"banana"在数组中的键名为1。 阅读详情

相关推荐

全志T133-s3(Tina Linux)下RTL8723DS WiFi驱动移植与调试实战

本文详细介绍了在全志T133-s3平台(Tina Linux)上移植RTL8723DS WiFi驱动的完整流程,包括硬件连接、驱动源码获取、内核配置、系统适配、设备树配置以及常见问题排查。通过实战案例,帮助开发者快速解决SDIO接口通信、固件加载、电源管理等关键问题,实现稳定的WiFi功能。

weixin_30505225的博客 507

php中in array函数_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_a...

weixin_33193177的博客 9万+

电脑主板开机12步流程全解析:从按下电源键到BIOS启动的完整过程

本文深入解析了电脑主板从按下电源键到BIOS启动的完整12步流程,详细阐述了待机电路、主供电上电、CPU供电建立、时钟信号分发及复位链等关键硬件协同工作原理。通过剖析电脑主板的电路结构与芯片协作时序,帮助读者构建系统性的硬件故障诊断思维,精准定位开机故障。

weixin_29290963的博客 267

PHP的in_array函数:宝藏还是陷阱?揭秘使用技巧

大家都知道,PHP是个神奇的语言,而in_array这个函数,简直就是PHP世界里的“宝藏”函数。今天咱们就来聊聊这个函数,看看它有哪些坑,以及如何优雅地避开这些坑。先来个简单的例子,假设你有一个数组,里面装了一堆水果,你想检查某个水果是否在这个数组里。

KgkTamwo的博客 1570

电机控制-PMSM无感FOC控制(五)SVPWM过调制策略优化与谐波抑制

本文深入探讨了PMSM无感FOC控制中的SVPWM过调制策略优化与谐波抑制。针对电机高速运行时电压利用率不足的问题,分析了过调制技术的必要性,并详细阐述了分区过调制、谐波注入及闭环优化等主流策略,旨在提升电压利用率与抑制电流谐波,实现电机高性能控制。

convnet3designer的博客 354

Abaqus滞回问题求解—浆锚连接装配式剪力墙滞回模拟

当下土木工程研究生,多数都在从事装配式混凝土构件安全或装配式混凝土构件连接节点力学性能的研究。研究这类问题,几乎脱离不开对有限元软件的使用,Abaqus求解能力非常强大,但模型处理能力相对较弱。装配式混凝土结构的有限元计算与传统现浇结构相比,其节点处理起来相对复杂,计算结果往往需要凸显出连接节点力学特性,所以对建模精程度的要求较高。所以向大家介绍一款工具—HyperMesh软件(一下简称Hm),它是专业的有限元前处理工具,用于处理装配式混凝土构件或连接节点有限元模型比较合适。这篇文章主要介绍如何利用Hm处理

qq_31918049的博客 2902

in_array函数缺陷

in_array函数缺陷

qq_37466661的博客 3135

python 携程登陆_Python 学习练习之用户登录接口

目的:用python实现简单用户注册,登陆,加黑功能,放个流程图吧。以下内容仅为练习 执行流程:[root@zabbix login]# python user_login.pyusername:tompassword:123456Are you want to register ? [y/n]yRegister successful,Please relogin ![root@zabbix lo...

weixin_28679635的博客 518

PHP in_array 函数,解决大量数据判断in_array的效率慢,in_array 效率优化

用到函数: array_flip() 将数组键名与值对调,而且还会帮助自动去重 array_column() 返回输入数组中某个单一列的值。可用于二维数组转一维数组 isset() 用来判断变量是否声明,该函数返回布尔类型的值,即true/false, 使用 isset() 而不使用 array_key_exists() 的原因,对于数组中为NULL的值不会返回TRUE,而array_k...

༺墨༒眉༻ 2944

跟着团子学SAP CO:基于成本的完工百分比结算:Cost-based POC(以项目为例)

本文以英国及北美会计准则下的基于成本的POC的销售型项目结算对PS模块中的完工百分比进行介绍

Lucas1211的博客 2万+

电动汽车欧标直流充电标准解析

电动汽车和电动汽车充电市场是动态发展的,欧洲也正在努力部署基础设施,以支持欧洲快速增长和多样化的电动汽车充电需求。

网络安全的研究者、新能源行业的追求者 7620

PHP中的in_array效率问题

在使用in_array判断字符串是否在指定的数组当中时,在少量数量时还行,看不出效率问题,在几十万数据时就会产生性能问题,建议使用方法2进行判断 //测试in_array效率 $search_str = '在'; $base_str = ['我','在','不在','数','组','里','面','效','率','怎','么','样','子']; //方法1 if(in_array($search_str,$base_str)){ echo 'exit'; }else{ echo 'no .

zhangchb的博客 704

【WorkBuddy专栏51】Codex与WorkBuddy的底层基因——两条完全不同的AI智能体路线(上)

【WorkBuddy专栏51】Codex与WorkBuddy的底层基因——两条完全不同的AI智能体路线(上)

AI人人懂 2184

PHP中in_array 效率及其优化

PHP中in_array 效率极其优化 时间 2013-12-26 12:05:20  LNMP100实验室原文  http://www.lnmp100.com/1059 大家可能都用过in_array来判断一个数据是否在一个数组中,一般我们的数组可能数据都比较小,对性能没什么影响,所以也就不会太在意,但是如果数组比较大的时候,性能就会下降,运行的就会久一点,那如果针对在大数组

dabao1989的专栏 6261

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

php中in array函数_php数组查找函数in_array()、array_search()、array_key_exists()使用实例...

php在数组中查找指定值是否存在的方法有很多,记得很久以前我一直都是傻傻的用foreach循环来查找的,下面我主要分享一下用php内置的三个数组函数来查找指定值是否存在于数组中,这三个数组分别是 in_array(),array_search(),array_key_exists()。首先分别介绍一下各自的定义与作用in_array(value,array,type)该函数的作用是在数组array...

weixin_39890327的博客 407

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

php in_array 性能,PHP:in_array()vs array_intersect()性能

什么,多少,更快 – 用foreach手动迭代数组并使用in_array()或使用array_intersect()检查针的出现?最佳答案:基准测试脚本$numbers = range(32, 127);$numbersLetters = array_map('chr', $numbers);for (;;) {$numbersLetters = array_merge($numbersLette...

weixin_42491664的博客 302

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

php中in_array中

&lt;?php$arr = array( 'aaa', 'bbb',3);if( in_array('3月',$arr) ){  echo '11'.PHP_EOL;}else{ echo 22;}echo '------------------------';  //输出11$arr = array( 'aaa', 'bbb',3);if( in_array('3月',$arr,true) )...

dl425134845的专栏 405

对使用in_array()对同一个数组多次查找不同值时效率低下的优化策略

使用in_array()对目标数组$arr频繁搜索时,效率是非常低下,针对这种case, 可以使用array_flip()和isset()进行优化;定义目标数组的长度为n, 搜索次数为m,假设m和n均为一个较大的数据,否则也没有优化的必要 具体的做法时,首先使用array_flip()函数交换数组中的键和值; 然后使用isset进行判断; 原理:in_array()做数据查找时是对数组的一次遍

fresHana的博客 1596

php array_key_exists 效率,in_array/array_key_exists等数组值查询效率分析

$arr = array();$str = '';for($i = 0; $i < 5000; $i++) {$a = 1000000000 + $i;// $str .= $a.",";$arr[$a] = $a;}$str = json_encode($arr);$a = 1000001010;for($j = 0; $j < 30000; $j++) {/*if (pr...

weixin_36272649的博客 253

arraysearch php,php中使用in_array() foreach array_search() 查找数组是否包含时的性能对比...

判断某字符是否包含与某于数组中,方法有很多,刚学习php的新手们估计偏向于使用循环来解决,对于一般的小网站来说,这种解决方案是不会出现什么大问题的。但就性能来说,这种方法不是最好的方法,下面笔者就 foreach,in_array() array_search 这三种方法来比较这三种方法在性能表现上的差异。$runtime= new runtime;$runtime->start();$a ...

weixin_36205186的博客 247

php 查找数组中的元素,php 查找数组元素提高效率的方法详解

1.php in_array方法说明PHP查找数组元素是否存在,一般会使用in_array方法。bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )参数说明:needle待搜索的值,如果needle是字符串,比较是区分大小写的。haystack用来比较的数组strict如果第三个参数 strict 的...

weixin_39851887的博客 281

php in_array的低性能

PS:原创文章,如需转载,请注明出处,谢谢!      本文地址:http://flyer0126.iteye.com/blog/2270090   PHP7最近推出了,首要说的就是性能方面的提升。对于in_array()一直诟病很多,至于性能有多差,先简单测试一下,看看数据。 测试程序如下: &lt;?php /** * 获取当前时间戳(毫秒级) * @return fl...

四维空间 1267

判断数组是否存在某元素

查找一个元素是否在数组中,一共有上面三种做法: in_array  ' 函数在数组中搜索给定的值。in_array(value,array,type)type 可选。如果设置该参数为 true,则检查搜索的数据与数组的值的类型是否相同。  array_key_exists ' array_key_exists() 函数判断某个数组中是否存在指定的 key,如果该 key 存在,

AmberCR的专栏 3383

PHP中测试in_array、isset、array_key_exists性能

测试in_array、isset、array_key_exists性能。自己写的简易测试代码: ini_set('display_errors',true); error_reporting(E_ALL); date_default_timezone_set('PRC'); function ttt($a,$b) { $u1 = $b[0]-$a[0]; $u2 = $b[1]

osfipin note 857

php大量正则优化,PHP优化指南:减少正则表达式的使用

在做PHP项目开发时往往要在性能优化上花费一定的时间来测试,今天我给大家分享一下我的PHP开发的经验之一:尽量少用正则表达式,原因就是正则表达式的性能略低于php的内置函数,如果利用php函数和正则都能实现一个效果的话尽量选用前者,当然这个需要对php内置函数比较熟悉的情况下!下面我就给大家举几个可以代替正则表达式的php函数的使用。strpos函数这个函数的作用就是检测字符串中是否存在于另一个字...

weixin_39861624的博客 204
上一篇: PHP中in_array函数使用的问题与解决办法
下一篇: nginx服务器详细安装过程(使用yum 和 源码包两种安装方式,并说明其区别)
ltx06
博客等级 码龄16年 115粉丝 91原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值