7

インデックスを再作成したい配列が1つあります。array_values私は、と関数の両方array_mergeがその仕事をすることができることを発見しました(そして、関数がarray_merge機能するために2つの配列は必要ありません)。

非常に大きなアレイの場合、どちらが高速ですか?私はこれをベンチマークしますが、方法がわからず、まだ大きなアレイを持っていません。

インデックスを再作成する前:

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

私はベンチマークを取得しました。

for と 8043 要素の配列

配列の値は 0.003291130065918 秒かかりました。

配列のマージには 0.0096800327301025 秒かかりました。

$shuf はインデックスのない配列です

以下は、ベンチマークを実行するためのコードです (Web からコピーしたもの)。

    $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 に答える