array_merge与array_value:重置数组索引的比较

7

我有一个数组需要重新索引。我发现 array_valuesarray_merge 函数都可以完成此任务(而且不需要使用 array_merge 函数的两个数组)。

对于非常大的数组,哪种方法更快?我会进行基准测试,但我不知道如何进行测试,也还没有这么大的数组。

重新索引之前:

Array
(
    [0] => AB
    [4] => EA
    [6] => FA
    [9] => DA
    [10] => AF
)

重新索引后:
Array
(
    [0] => AB
    [1] => EA
    [2] => FA
    [3] => DA
    [4] => AF
)

我得到了基准测试结果,array_value 比数组元素快 3 倍,对于包含 8043 个元素的数组,数组值花费了 0.003291130065918 秒。数组合并花费了 0.0096800327301025 秒。$shuf 是未索引的数组。以下是运行基准测试的代码(从网上复制):$sha1_start = microtime(true); $arraymerge = array_merge ($shuf); $shal_elapsed = microtime(true) - $sha1_start;$start = microtime(true); $arrayvalue = array_values ($shuf); $elapsed = microtime(true) - $start;echo "<br>array values took $elapsed seconds."; echo "<br>array merge took $shal_elapsed seconds."; - Jamex
4个回答

3
我得到了基准测试结果,array_value比起for循环快了3倍(抱歉自问自答,评论区不保留格式)。针对包含8043个元素的数组:
- 数组值需要0.003291130065918秒。 - 数组合并需要0.0096800327301025秒。 - $shuf是未索引的数组。
以下是运行基准测试的代码(从网络上复制的)。
    $sha1_start = microtime(true); 
    $arraymerge = array_merge ($shuf); 
    $shal_elapsed = microtime(true) - $sha1_start;


    $start = microtime(true); 
    $arrayvalue = array_values ($shuf); 
    $elapsed = microtime(true) - $start;

echo "<br>array values took $elapsed seconds."; 
echo "<br>array merge took $shal_elapsed seconds.";

谢谢您的澄清!也许您可以在这里接受这个答案 :) - xvilo

2

array_values旨在精确地完成您想要的操作。 array_merge旨在执行其他操作,您需要使用一些变通方法来让它适用于您的情况。(如果索引中遗漏了非数字值,则可能会出现问题)。

我不知道是否存在重大性能差异,但可以确定使用array_values编写的代码更易于阅读。而且我认为,一个旨在完成某个任务的函数不会比旨在完成其他任务的函数慢。

希望这可以帮助您。


2

我也没有进行基准测试——如果你需要确保,你应该自己进行测试。

话虽如此,我认为如果两者之一更好的话,array_values() 应该是更好的选择。

毕竟,你想做的正是 array_values() 设计用来完成的任务。


1

需要注意的是,array_merge() 只有在数组中没有字符串键时才会重置数组键。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接