• 技术文章 >后端开发 >php教程

    php实现查找数组元素提高效率的方法

    墨辰丷墨辰丷2018-05-23 09:27:21原创624
    本文主要介绍了php查找数组元素提高效率的方法,具有很好的参考价值。感兴趣的朋友参考下,希望对大家有所帮助。

    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_flipisset判断元素是否存在,在10万个元素的数组中比较1000次,运行时间需要约1.2毫秒

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

    相关推荐:

    php 数组元素快速去重的方法

    怎样使用array_sum() 计算数组元素值总和

    php双引号中访问数组元素报错如何处理

    以上就是php实现查找数组元素提高效率的方法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:提高效率 php 元素
    上一篇:PHP如何判断是否为AJAX请求? 下一篇:thinkPHP分页功能图文详解
    大前端线上培训班

    相关文章推荐

    • PHP中的命名空间定义与使用(实例详解)• PHP中clone关键字和__clone()方法的使用(实例详解)• 带你分清类中的构造函数与析构函数• 五分钟带你了解PHP中的魔术方法(实例详解)• 怎样去搞定PHP类的继承?(总结分享)

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网