Heim  >  Artikel  >  Backend-Entwicklung  >  Leistungsoptimierung der mehrdimensionalen PHP-Array-Sortierung: vom Code zum Algorithmus

Leistungsoptimierung der mehrdimensionalen PHP-Array-Sortierung: vom Code zum Algorithmus

王林
王林Original
2024-04-29 15:57:011109Durchsuche

Die Leistungsoptimierung der mehrdimensionalen Array-Sortierung von PHP kann sowohl durch Code als auch durch Algorithmen verbessert werden. Die Codeoptimierung umfasst die Verwendung von Usort- und selbstgeschriebenen Vergleichsfunktionen, um übermäßige Vergleiche und Kopien zu vermeiden. Die Algorithmusoptimierung umfasst schnelle Sortier- und Zusammenführungssortieralgorithmen. Die Schnellsortierung eignet sich für große Arrays, während die Zusammenführungssortierung für alle Datentypen geeignet ist. Das Codebeispiel zeigt, wie Sie ein Array mit untergeordneten Elementen mithilfe dieser beiden Algorithmen sortieren: Schnellsortierung nach ID und Zusammenführungssortierung nach Name.

Leistungsoptimierung der mehrdimensionalen PHP-Array-Sortierung: vom Code zum Algorithmus

PHP Multidimensional Array Sorting Performance Optimization: Code und Algorithmus

Einführung

Multidimensionales Array ist eine häufige Datenstruktur in PHP und ist sehr nützlich bei der Verarbeitung komplexer Daten. Allerdings treten Leistungsprobleme auf, wenn Sie mehrdimensionale Arrays sortieren müssen. In diesem Artikel wird die Leistungsoptimierung der mehrdimensionalen Array-Sortierung in PHP untersucht und Lösungen sowohl unter Code- als auch unter Algorithmusaspekten bereitgestellt.

Codeoptimierung

Verwenden Sie usort und eine selbst geschriebene Vergleichsfunktionusort 和自写比较函数

相比于内置的 sort 函数,usort

Im Vergleich zur integrierten sort-Funktion ist die usort code>-Funktion Bietet eine größere Flexibilität, da Sie benutzerdefinierte Vergleichsfunktionen zum Sortieren von Array-Elementen verwenden können. Selbstgeschriebene Vergleichsfunktionen können an Ihre spezifischen Sortieranforderungen angepasst werden und sorgen so für eine effizientere Sortierung. <strong><pre class='brush:php;toolbar:false;'>&lt;?php function compare($a, $b) { return $a['key'] &lt;=&gt; $b['key']; } usort($array, 'compare');</pre></strong>

Vermeiden Sie übermäßiges Vergleichen und Kopieren

    Während des Sortiervorgangs werden Array-Elemente wiederholt verglichen und kopiert. Die Leistung kann verbessert werden, indem die Anzahl unnötiger Vergleiche und Kopien reduziert wird. Die folgenden Tipps können Ihnen helfen, diese Vorgänge zu vermeiden:
  • Verwenden Sie die Zusammenführungssortierung:
  • Die Zusammenführungssortierung ist ein Divide-and-Conquer-Algorithmus, der die Anzahl unnötiger Vergleiche reduziert.
  • Erstellen Sie eine Kopie zum Sortieren:
Sortieren Sie eine Kopie des Arrays, um eine Änderung des ursprünglichen Arrays zu vermeiden.

Algorithmusoptimierung

Schnellsortierung verwenden:

Schnellsortierung ist ein effizienter Sortieralgorithmus, der sich besonders für große Arrays eignet. Dabei wird das Array in kleinere Teile unterteilt und die Teile rekursiv sortiert.

<?php
function quickSort($array) {
  if (count($array) <= 1) {
    return $array;
  }
  $pivot = $array[0];
  $left = array_filter($array, function ($item) use ($pivot) {
    return $item < $pivot;
  });
  $right = array_filter($array, function ($item) use ($pivot) {
    return $item >= $pivot;
  });
  return array_merge(quickSort($left), [$pivot], quickSort($right));
}

Verwenden Sie die Zusammenführungssortierung:

Die Zusammenführungssortierung ist ebenfalls ein effizienter Sortieralgorithmus, der für jede Art von Daten funktioniert. Es funktioniert, indem es das Array rekursiv in kleinere Teile aufteilt, die Teile sortiert und sie dann zusammenführt.

<?php
function mergeSort($array) {
  if (count($array) <= 1) {
    return $array;
  }
  $mid = intdiv(count($array), 2);
  $left = mergeSort(array_slice($array, 0, $mid));
  $right = mergeSort(array_slice($array, $mid));
  return merge($left, $right);
}

function merge($left, $right) {
  $result = [];
  while (count($left) > 0 && count($right) > 0) {
    if ($left[0] <= $right[0]) {
      $result[] = array_shift($left);
    } else {
      $result[] = array_shift($right);
    }
  }
  return array_merge($result, $left, $right);
}

Praktischer Fall

Das Folgende ist ein praktischer Fall, der zeigt, wie die Schnellsortierung und Zusammenführungssortierung verwendet wird, um ein mehrdimensionales Array mit Unterelementen zu sortieren:

<?php
$array = [
  ['id' => 1, 'name' => 'John'],
  ['id' => 3, 'name' => 'Alice'],
  ['id' => 2, 'name' => 'Bob']
];

// 使用快速排序按 id 排序
$quickSortedArray = quickSort($array);

// 使用归并排序按 name 排序
$mergeSortedArray = mergeSort($array);

// 输出排序后的数组
print_r($quickSortedArray);
print_r($mergeSortedArray);

Ausgabe: 🎜🎜
Array
(
    [0] => Array
        (
            [id] => 1
            [name] => John
        )

    [1] => Array
        (
            [id] => 2
            [name] => Bob
        )

    [2] => Array
        (
            [id] => 3
            [name] => Alice
        )

)

Array
(
    [0] => Array
        (
            [id] => 2
            [name] => Bob
        )

    [1] => Array
        (
            [id] => 1
            [name] => John
        )

    [2] => Array
        (
            [id] => 3
            [name] => Alice
        )

)

Das obige ist der detaillierte Inhalt vonLeistungsoptimierung der mehrdimensionalen PHP-Array-Sortierung: vom Code zum Algorithmus. 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