ホームページ >バックエンド開発 >PHPチュートリアル >PHP 組み込み関数とカスタム関数を使用して配列を重複排除した場合のパフォーマンスの比較

PHP 組み込み関数とカスタム関数を使用して配列を重複排除した場合のパフォーマンスの比較

WBOY
WBOYオリジナル
2024-04-26 21:09:01542ブラウズ

array_unique() は、配列の重複排除に最高のパフォーマンスを発揮する組み込み関数です。ハッシュ テーブル方式は、カスタム関数に対して最高のパフォーマンスを発揮します。ハッシュ値がキーとして使用され、値は空になります。ラウンドロビン方式は実装が簡単ですが、非効率的です。重複排除には組み込み関数またはカスタム関数を使用することをお勧めします。 array_unique() には 0.02 秒、array_reverse array_filter() には 0.04 秒、ハッシュ テーブル メソッドには 0.01 秒、ラウンドロビン メソッドには 0.39 秒かかります。

使用 PHP 内置函数和自定义函数去重数组的性能对比

重複排除アレイの PHP 組み込み関数とカスタム関数のパフォーマンスの比較

はじめに

重複排除アレイこれは、配列内の重複要素を削除し、一意の値を保持することを指します。 PHP には、これを行うための組み込み関数とカスタム関数が多数用意されています。この記事では、これらの関数のパフォーマンスを比較し、実際の例を示します。

組み込み関数

  • array_unique(): ハッシュ テーブルを使用して重複を削除する組み込み関数。の方が効率的です。
  • array_reverse() array_filter(): array_reverse() を使用して配列を反転し、それを array_filter( ) をシフトして重複した要素を削除します。

カスタム関数

  • ハッシュ テーブル メソッド: キーを配列の値として持つハッシュ テーブルを作成します。値は空です。配列を反復処理して、各値をハッシュ テーブルに追加します。重複排除された配列はハッシュ テーブルのキーです。
  • ループメソッド: 2 つのポインターを使用して配列を走査します。ポインタ 1 は外側のループを担当し、ポインタ 2 は内側のループを担当します。外側ポインタの値が内側ポインタの値の範囲内にない場合、その値は結果配列に追加されます。

実際的なケース

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: 0.02 秒
  • array_reverse array_filter: 0.04 秒
  • ハッシュテーブル方式: 0.01 秒
  • ラウンドロビン方式: 0.39 秒

結論

テスト結果によると、array_unique() は配列の重複を排除するための最も速い組み込み関数ですが、ハッシュtable メソッド 最高のパフォーマンスを備えたカスタム関数です。ラウンドロビン方式は実装が簡単ですが、効率は低くなります。大きな配列を扱う場合は、重複排除に array_unique() またはハッシュ テーブル メソッドを使用することをお勧めします。

以上がPHP 組み込み関数とカスタム関数を使用して配列を重複排除した場合のパフォーマンスの比較の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。