array_unique() は、配列の重複排除に最高のパフォーマンスを発揮する組み込み関数です。ハッシュ テーブル方式は、カスタム関数に対して最高のパフォーマンスを発揮します。ハッシュ値がキーとして使用され、値は空になります。ラウンドロビン方式は実装が簡単ですが、非効率的です。重複排除には組み込み関数またはカスタム関数を使用することをお勧めします。 array_unique() には 0.02 秒、array_reverse array_filter() には 0.04 秒、ハッシュ テーブル メソッドには 0.01 秒、ラウンドロビン メソッドには 0.39 秒かかります。
はじめに
重複排除アレイこれは、配列内の重複要素を削除し、一意の値を保持することを指します。 PHP には、これを行うための組み込み関数とカスタム関数が多数用意されています。この記事では、これらの関数のパフォーマンスを比較し、実際の例を示します。
組み込み関数
array_unique()
: ハッシュ テーブルを使用して重複を削除する組み込み関数。の方が効率的です。 array_reverse()
array_filter()
: array_reverse()
を使用して配列を反転し、それを array_filter( )
をシフトして重複した要素を削除します。 カスタム関数
実際的なケース
100 万個の整数を含む配列 $array
があるとします。
$array = range(1, 1000000); $iterations = 100;
パフォーマンス テスト
function test_array_unique($array, $iterations) { $total_time = 0; for ($i = 0; $i < $iterations; $i++) { $start_time = microtime(true); $result = array_unique($array); $end_time = microtime(true); $total_time += $end_time - $start_time; } $avg_time = $total_time / $iterations; echo "array_unique: $avg_time seconds\n"; } function test_array_reverse_array_filter($array, $iterations) { $total_time = 0; for ($i = 0; $i < $iterations; $i++) { $start_time = microtime(true); $result = array_filter(array_reverse($array), 'array_unique'); $end_time = microtime(true); $total_time += $end_time - $start_time; } $avg_time = $total_time / $iterations; echo "array_reverse + array_filter: $avg_time seconds\n"; } function test_hash_table($array, $iterations) { $total_time = 0; for ($i = 0; $i < $iterations; $i++) { $start_time = microtime(true); $result = array_values(array_filter($array, function ($value) { static $hash_table = []; if (isset($hash_table[$value])) { return false; } $hash_table[$value] = true; return true; })); $end_time = microtime(true); $total_time += $end_time - $start_time; } $avg_time = $total_time / $iterations; echo "hash table: $avg_time seconds\n"; } function test_loop($array, $iterations) { $total_time = 0; for ($i = 0; $i < $iterations; $i++) { $start_time = microtime(true); $result = array_values(array_filter($array, function ($value) use (&$array) { for ($j = 0; $j < count($array); $j++) { if ($j == $i) { continue; } if ($value == $array[$j]) { return false; } } return true; })); $end_time = microtime(true); $total_time += $end_time - $start_time; } $avg_time = $total_time / $iterations; echo "loop: $avg_time seconds\n"; } test_array_unique($array, $iterations); test_array_reverse_array_filter($array, $iterations); test_hash_table($array, $iterations); test_loop($array, $iterations);
結果
100万個の整数の配列を使用した各関数の平均実行時間は次のとおりです。 :
結論
テスト結果によると、array_unique()
は配列の重複を排除するための最も速い組み込み関数ですが、ハッシュtable メソッド 最高のパフォーマンスを備えたカスタム関数です。ラウンドロビン方式は実装が簡単ですが、効率は低くなります。大きな配列を扱う場合は、重複排除に array_unique()
またはハッシュ テーブル メソッドを使用することをお勧めします。
以上がPHP 組み込み関数とカスタム関数を使用して配列を重複排除した場合のパフォーマンスの比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。