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

前端之家收集整理的这篇文章主要介绍了php – 选择哈希的第N个元素的最快方法前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个很大的哈希表(带有字符串索引的数组),并寻找一个快速从中挑选第一个(理想情况下也是第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 = %.3f\n",$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));

猜你在找的PHP相关文章