首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

浅谈PHP array_search 和 in_array 函数效率问题

问题 在一个接口中,发现非常耗时,排查原因发现 array_search 查找数组中的元素的 key 时,效率随着数组变大,耗时增加。特别是大数组时,非常耗时。...在函数 in_array 也有这个问题。...解决办法 采用 array_flip 翻转后,用 isset 代替 in_array 函数,用 $array[key] 替代 array_search, 这样能解决大数组超时耗时问题 下面是我从 php...——————–2019-10-14 更新 ———————- 更正 有人提出意见说道,array_flip 效率比 in_array 和 array_search 高,做了一些实验,确实如此。...这个解决办法,适用于多次使用 in_array 和 array_search 函数,才有效。下面是自己做实验的结果。感谢 @木偶指出的问题 <?

85731
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    3分钟短文 | PHP 根据值移除数组元素,哪个方法最简单?

    最简单的办法,应该使用 array_search 和 unset 两个函数完成,代码这样写: if (($key = array_search($del_val, $messages)) !...== false) { unset($messages[$key]); } 函数 array_search 是在数组中搜索给定的值,如果成功则返回相应的键名。...我们使用变量 $key 获取 array_search 的返回值,如果不是 false,那么就是存在。然后调用 unset 函数进行删除即可。 需要注意的是,比较运算符一定是使用“!...我们尝试使用 array_diff 函数,计算差集,可以删除任意多个元素的值: array_diff( [312, 401, 15, 401, 3], [401] ) 但是这个函数会有副作用,就是返回值是新的数组...手册上也说了,这样根据值移除数据内所有对应元素的,应该使用 array_keys 函数

    1.2K20

    3分钟短文 | PHP多维数组搜索值,就只能for循环?这样写更高效

    当然了,上面写的函数具有通用性,对于特殊的案例,我们应该随机应变。对于上述 $userdb 关联数组的结构,显然,使用PHP内置的函数操作起来,更为直观和快捷。...我们只需要先把 uid 列的元素全部取出,因为上层结构是默认数字索引,所以此处不用手动指定索引值;然后,在提取的数组中搜索值,使用 array_search 执行返回键。...总结为代码,就一行: $key = array_search('100', array_column($userdb, 'uid')); 执行结果跟上面的 searchForId 函数一致。...像下面这样写,肯定问题不大: $key = array_search(40489, array_column($userdb, 'uid')); 但是如果在数组中有重复的值,而 uid 列也不唯一,要把所有的匹配结果都返回...不会又要修改 searchForId 函数,重新倒腾?

    2.5K20

    粘贴一篇刘大佬的笔记

    由于其自身弱类型语言的特性以及内置函数对于传入参数的松散处理,所以会带来很多的问题,这里将进行简要介绍。...题目让我们传入$passwd的值并且要与$password相等,但是我们不知道$password的值,strcmp期望传入字符串,但是如果传入数组将会怎么样呢,我们尝试传入数组passwd[]='flag',函数接受了不符合的类型...> json_decode函数解密成一个数组,判断数组中的值是否等于$key的值,但$key的值我们不知道,但可以通过==弱类型比较绕过。...in_array/array_search $array=[0,1,2,'3']; var_dump(in_array('abc', $array)); //true var_dump(array_search...("1admin",$a)); // true in_array和array_search会对类型进行强制转换,并且是==进行比较,所以可以绕过。

    38220
    领券