7

我有 1 个要重新索引的数组。我发现array_valuesandarray_merge函数都可以完成这项工作(而且我不需要 2 个数组来使array_merge函数工作)。

对于非常大的阵列,哪个更快?我会对此进行基准测试,但我不知道如何并且还没有大型阵列。

重新索引之前:

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

重新索引后:

Array
(
    [0] => AB
    [1] => EA
    [2] => FA
    [3] => DA
    [4] => AF
)
4

4 回答 4

3

我得到了基准,array_value 快了 3 倍(抱歉回答我自己的问题,评论部分不保留格式)

包含 8043 个元素的 for 和数组

数组值花费了 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.";
于 2010-05-31T01:00:46.633 回答
2

array_values 旨在完全按照您的意愿去做。array_merge 是为了做其他事情,你有一个解决方法让它适用于你的情况。(尽管如果在索引中忘记了非数字值,您可能会遇到问题)。

我不知道是否存在显着的性能差异,但可以肯定的是用 array_values 编写的代码更容易阅读。而且我不认为一个旨在做某事的功能比一个旨在做其他事情的功能慢。

希望这可以帮助。

于 2010-05-30T23:42:31.413 回答
2

我也没有做过基准测试——如果你需要确定,你应该做。

也就是说,我怀疑如果一个比另一个更可取, array_values() 将是要走的路。

毕竟,您想要做的正是 array_values() 的设计目的。

于 2010-05-30T23:42:58.127 回答
1

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

于 2010-05-30T23:45:57.703 回答