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

作者:傲雪星枫 时间:2023-11-15 02:51:08 

1.php in_array方法说明

PHP查找数组元素是否存在,一般会使用in_array方法。

bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )

参数说明:

needle

待搜索的值,如果needle是字符串,比较是区分大小写的。

haystack

用来比较的数组

strict

如果第三个参数 strict 的值为 TRUE 则 in_array() 函数还会检查 needle 的类型是否和 haystack 中的相同

返回值

如果找到 needle 则返回 TRUE,否则返回 FALSE。

2.in_array查找元素效率

当比较的数组haystack较大时,in_array效率会很低

例子:使用in_array对有10万个元素的数组进行1000次比较


<?php
$arr = array();

// 创建10万个元素的数组
for($i=0; $i<100000; $i++){
$arr[] = $i;
}

// 记录开始时间
$starttime = getMicrotime();

// 随机创建1000个数字使用in_array比较
for($j=0; $j<1000; $j++){
$str = mt_rand(1,99999);
in_array($str, $arr);
}

// 记录结束时间
$endtime = getMicrotime();

echo 'run time:'.(float)(($endtime-$starttime)*1000).'ms<br>';
/**
* 获取microtime
* @return float
*/
function getMicrotime(){
list($usec, $sec) = explode(' ', microtime());
return (float)$usec + (float)$sec;
}
?>

run time:2003.6449432373ms

使用in_array判断元素是否存在,在10万个元素的数组中比较1000次,运行时间需要约2秒

3.提高查找元素效率方法

我们可以先使用array_flip进行键值互换,然后使用isset方法来判断元素是否存在,这样可以提高效率。

例子:使用array_flip先进行键值互换,再使用isset方法判断,在10万个元素的数组中比较1000次


<?php
$arr = array();

// 创建10万个元素的数组
for($i=0; $i<100000; $i++){
$arr[] = $i;
}

// 键值互换
$arr = array_flip($arr);

// 记录开始时间
$starttime = getMicrotime();

// 随机创建1000个数字使用isset比较
for($j=0; $j<1000; $j++){
$str = mt_rand(1,99999);
isset($arr[$str]);
}

// 记录结束时间
$endtime = getMicrotime();

echo 'run time:'.(float)(($endtime-$starttime)*1000).'ms<br>';
/**
* 获取microtime
* @return float
*/
function getMicrotime(){
list($usec, $sec) = explode(' ', microtime());
return (float)$usec + (float)$sec;
}
?>

run time:1.2781620025635ms

使用array_flip与isset判断元素是否存在,在10万个元素的数组中比较1000次,运行时间需要约1.2毫秒

因此,对于大数组进行比较,使用array_flip与isset方法会比in_array效率高很多。

来源:http://blog.csdn.net/fdipzone/article/details/50616030

标签:php,查找,元素
0
投稿

猜你喜欢

  • asp MYSQL出现问号乱码的解决方法

    2011-04-15 11:13:00
  • 详解python中递归函数

    2022-04-17 19:40:55
  • 将tf.batch_matmul替换成tf.matmul的实现

    2021-03-25 03:35:43
  • Vue.js使用axios动态获取response里的data数据操作

    2024-05-08 09:34:06
  • Python SQLite3简介

    2023-05-29 11:26:01
  • 详述如何提高MySQL中数据装载效率

    2009-10-26 10:27:00
  • Vue+Flask实现图片传输功能

    2024-05-21 10:15:34
  • Python OpenCV读取png图像转成jpg图像存储的方法

    2023-01-07 13:23:56
  • Mysql技术内幕之InnoDB锁的深入讲解

    2024-01-19 12:16:21
  • Django怎么在admin后台注册数据库表

    2024-01-26 03:12:50
  • 微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动

    2023-11-14 14:01:31
  • python中filter函数的用法示例代码

    2022-11-01 19:18:40
  • getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现

    2024-04-22 13:01:07
  • 如何对MySQL数据库表进行锁定

    2009-02-10 10:39:00
  • Go处理json数据方法详解(Marshal,UnMarshal)

    2024-02-06 11:47:24
  • python实现凯撒密码

    2022-10-13 07:31:44
  • 解读Scrapy回调函数callback传递参数的方式

    2022-12-02 04:12:53
  • asp如何显示一个等待或欢迎信息?

    2010-06-08 09:39:00
  • 一篇文章彻底搞懂python正则表达式

    2021-02-10 13:16:19
  • MYSQL中怎样设列的默认值为Now()的介绍

    2008-11-01 16:54:00
  • asp之家 网络编程 m.aspxhome.com