gpt4 book ai didi

php - 选择散列的第 N 个元素的最快方法

转载 作者:可可西里 更新时间:2023-11-01 13:09:42 29 4
gpt4 key购买 nike

我有一个很大的哈希表(带有字符串索引的数组),正在寻找一个快速从中选取第一个(理想情况下也是第 N 个)元素的函数。 array_shift()reset() 对我的需求来说太慢了。

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

中的表达式

ANSWER array_slice 方法(荣誉 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, 0, 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 - 选择散列的第 N 个元素的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6263319/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com