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)); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |