Heim  >  Artikel  >  Backend-Entwicklung  >  Leistungsvergleich der Verwendung integrierter PHP-Funktionen und benutzerdefinierter Funktionen zur Deduplizierung von Arrays

Leistungsvergleich der Verwendung integrierter PHP-Funktionen und benutzerdefinierter Funktionen zur Deduplizierung von Arrays

WBOY
WBOYOriginal
2024-04-26 21:09:01471Durchsuche

array_unique() ist die integrierte Funktion mit der besten Leistung zum Deduplizieren von Arrays. Die Hash-Tabellenmethode bietet die beste Leistung für benutzerdefinierte Funktionen. Der Hash-Wert wird als Schlüssel verwendet und der Wert ist leer. Die Round-Robin-Methode ist einfach zu implementieren, aber ineffizient. Es wird empfohlen, integrierte oder benutzerdefinierte Funktionen für die Deduplizierung zu verwenden. array_unique() dauert 0,02 Sekunden, array_reverse + array_filter() dauert 0,04 Sekunden, die Hash-Tabellenmethode dauert 0,01 Sekunden und die Round-Robin-Methode dauert 0,39 Sekunden.

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

Leistungsvergleich von in PHP integrierten Funktionen und benutzerdefinierten Funktionen zum Deduplizieren von Arrays

Einführung

Arrays deduplizieren bezieht sich auf das Entfernen doppelter Elemente in einem Array und das Beibehalten eindeutiger Werte. PHP bietet hierfür eine Reihe integrierter und benutzerdefinierter Funktionen. In diesem Artikel wird die Leistung dieser Funktionen verglichen und praktische Beispiele bereitgestellt.

Eingebaute Funktion

  • array_unique(): Integrierte Funktion, die eine Hash-Tabelle verwendet, um Duplikate zu entfernen, was effizienter ist.
  • array_unique():内置函数,通过 哈希表 进行去重,效率较高。
  • array_reverse() + array_filter():使用 array_reverse() 逆序数组,然后结合 array_filter() 移除重复元素。

自定义函数

  • 哈希表法:创建一个哈希表,键为数组中的值,值为空。遍历数组,将每个值添加到哈希表。去重后的数组就是哈希表的键。
  • 循环法:使用两个指针遍历数组。指针 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() 是去重数组最快的内置函数,而哈希表法是性能最优的自定义函数。循环法虽然容易实现,但效率较低。在处理大型数组时,建议采用 array_unique()array_reverse() + array_filter(): Verwenden Sie array_reverse(), um das Array umzukehren, und kombinieren Sie es dann mit array_filter() Doppelte Elemente entfernen.

🎜Benutzerdefinierte Funktion🎜🎜🎜🎜🎜Hash-Tabellenmethode🎜: Erstellen Sie eine Hash-Tabelle, der Schlüssel ist der Wert im Array und der Wert ist leer. Durchlaufen Sie das Array und fügen Sie jeden Wert zur Hash-Tabelle hinzu. Das deduplizierte Array ist der Schlüssel der Hash-Tabelle. 🎜🎜Loop-Methode🎜: Verwenden Sie zwei Zeiger, um das Array zu durchlaufen. Zeiger 1 ist für die äußere Schleife verantwortlich und Zeiger 2 ist für die innere Schleife verantwortlich. Wenn der Wert des äußeren Zeigers nicht innerhalb des Werts des inneren Zeigers liegt, wird der Wert zum Ergebnisarray hinzugefügt. 🎜🎜Praktischer Fall🎜🎜🎜Angenommen, wir haben ein Array $array mit 1 Million Ganzzahlen. 🎜rrreee🎜🎜Leistungstest🎜🎜rrreee🎜🎜Ergebnisse🎜🎜🎜Bei Verwendung eines Arrays von 1 Million Ganzzahlen ist die durchschnittliche Laufzeit jeder Funktion wie folgt: 🎜🎜🎜array_unique: 0,02 Sekunden🎜array_reverse + array_filter: 0,04 Sekunden 🎜Hash-Tabellenmethode: 0,01 Sekunden🎜Loop-Methode: 0,39 Sekunden🎜🎜Fazit🎜🎜🎜Den Testergebnissen zufolge array_unique() Es ist die schnellste integrierte Funktion zum Deduplizieren von Arrays, während die Hash-Tabellenmethode die benutzerdefinierte Funktion mit der besten Leistung ist. Obwohl die Round-Robin-Methode einfach zu implementieren ist, ist sie weniger effizient. Beim Umgang mit großen Arrays wird empfohlen, zur Deduplizierung <code>array_unique() oder die Hash-Tabellenmethode zu verwenden. 🎜

Das obige ist der detaillierte Inhalt vonLeistungsvergleich der Verwendung integrierter PHP-Funktionen und benutzerdefinierter Funktionen zur Deduplizierung von Arrays. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn