加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 选择哈希的第N个元素的最快方法

发布时间:2020-12-13 16:26:47 所属栏目:PHP教程 来源:网络整理
导读:我有一个很大的哈希表(带有字符串索引的数组),并寻找一个快速从中挑选第一个(理想情况下也是第N个)元素的函数. array_shift()和reset()对我的需求来说太慢了. 更新:我也不是在寻找基于引用的解决方案,该函数应该接受get_first中的表达式(some_func_returnin
我有一个很大的哈希表(带有字符串索引的数组),并寻找一个快速从中挑选第一个(理想情况下也是第N个)元素的函数. array_shift()和reset()对我的需求来说太慢了.

更新:我也不是在寻找基于引用的解决方案,该函数应该接受get_first中的表达式(some_func_returning_array())

答案array_slice方法(kudos Gumbo)似乎是胜利者.完整的基准测试代码

function bigary($n) {
    $a = array();
    $s = range('A','Z');
    do {
        shuffle($s);
        $a[substr(implode('',$s),rand(10,20))] = $n;
    } while(--$n);
    return $a;
}

function timeit($name,$fn) {
    global $results;

    $loops = 1000;
    $size  = 5432;

    static $a;
    if(!$a) $a = bigary($size);

    $t = microtime(1);
    for($i = 0; $i < $loops; $i++)
        $b = $fn($a);
    $results[$name] = microtime(1) - $t;
}

timeit('dummy',function ($a) { 
    // benchmark php function call overhead
});

timeit('array_shift',function ($a) { 
    return array_shift($a); 
});

timeit('reset',function ($a) { 
    return reset($a); 
});

timeit('foreach',function ($a) { 
    foreach($a as $b) return $b;
});

timeit('keys',function ($a) { 
    $b = array_keys($a); 
    return $a[$b[0]];
});

timeit('values',function ($a) { 
    $b = array_values($a); 
    return $b[0];
});

timeit('slice',function ($a) { 
    $b = array_slice($a,1); 
    return reset($b);
});

asort($results);

foreach($results as $name => $time)
    printf("%20s = %.3fn",$name,$time);

结果:

dummy = 0.393
           slice = 0.433
          values = 0.824
         foreach = 0.929
           reset = 0.935
     array_shift = 0.954
            keys = 1.371
使用 array_slice获取第n个项目和 array_pop的数组,最终得到它:
$nthItem = array_pop(array_slice($arr,$n,1));

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读