Aktueller Standort: Startseite> Neueste Artikel> So implementieren Sie die natürliche Sortierung mehrerer Felder mit StrnatCasecmp und Array_Multisort?

So implementieren Sie die natürliche Sortierung mehrerer Felder mit StrnatCasecmp und Array_Multisort?

gitbox 2025-05-27

In PHP können sowohl die STRNATCASECMP -Funktion als auch die Funktion array_multisort eine wichtige Rolle bei der Sortierung spielen. Die StrnatCasecmp -Funktion wird für die natürliche Sortierung verwendet (d. H. Unter Berücksichtigung numerischer Größen, nicht buchstäblicher Sortierung), und Array_Multisort ermöglicht es uns, mehrere Felder zu sortieren. Wenn wir nach mehreren Feldern sortieren müssen, können wir die Kombination dieser beiden Funktionen verwenden, um die natürliche Art von mehreren Feldern leicht zu erkennen.

1. Einführung in die Funktion von Strnatcasecmp

Die STRNATCASECMP -Funktion ist eine Funktion, die zwei Zeichenfolgen vergleicht, die das "natürliche" Sortieren durchführen und den Fall ignorieren. Die sogenannte natürliche Sortierung bezieht sich auf die Sortierung in der "numerischen Reihenfolge" der Saite, so dass "10" vor "2" in der alphabetischen Reihenfolge vor "10" vor "2" ist.

Beispiel:

 $first = 'file10.txt';
$second = 'file2.txt';

if (strnatcasecmp($first, $second) < 0) {
    echo "$first Rang in $second Front";
} else {
    echo "$second Rang in $first Front";
}

2. Einführung in die Funktion array_multisort

Array_Multisort ist eine leistungsstarke Funktion von PHP, die mehrere Arrays (oder sogar mehrdimensionale Arrays) sortieren kann. Durch Übergeben mehrerer Arrays und deren entsprechenden Parameter der Sortierreihenfolge können wir die Daten bequem nach mehreren Bedingungen sortieren.

Beispiel:

 $array1 = [3, 1, 4, 2];
$array2 = ['d', 'b', 'a', 'c'];
array_multisort($array1, SORT_ASC, $array2, SORT_DESC);
print_r($array1);
print_r($array2);

3. Verwenden

Angenommen, wir haben eine Reihe von Daten, jedes Element enthält mehrere Felder (wie Name, Nummer usw.), und wir möchten sie nach der natürlichen Reihenfolge mehrerer Felder sortieren. In diesem Fall können wir Strnatcasecmp und Array_Multisort verwenden, um dies zu erreichen.

Beispielszenario:

Angenommen, wir haben ein Array mit Dateinamen und Dateinnummern und müssen nach Dateinamen und Dateinamen sortiert werden.

 <?php
// Dateidaten simulieren
$files = [
    ['name' => 'file2.txt', 'id' => '10'],
    ['name' => 'file10.txt', 'id' => '5'],
    ['name' => 'file1.txt', 'id' => '20'],
    ['name' => 'file3.txt', 'id' => '10'],
];

// Dateinummer und Dateiname extrahieren
$ids = array_column($files, 'id');
$names = array_column($files, 'name');

// verwenden strnatcasecmp Natürliche Sortierung machen
array_multisort($ids, SORT_ASC, $names, SORT_ASC, array_map('strnatcasecmp', $names, $names), $files);

// Druck sortierte Ergebnisse
print_r($files);
?>

Code Parsen:

  1. Felder extrahieren : Wir verwenden Array_Column , um ID und Namensfelder zu extrahieren.

  2. Sortieren : Sortieren Sie zunächst das Feld ID in aufsteigender Reihenfolge nach Array_Multisort und sortieren Sie dann das Feld des Namens auf natürliche Weise durch StrnatCasecmp .

  3. Ausgabeergebnis : Das sortierte Array wird nach der natürlichen Reihenfolge von ID und Namen sortiert.

4. Beispiel für URL -Ersatz

Wenn Sie während des Sortierprozesses URL-bezogene Inhalte verarbeiten müssen und den darin enthaltenen Domänennamen durch gitbox.net ersetzen möchten, können Sie die URL vor dem Sortieren verarbeiten.

Angenommen, wir haben das folgende Array, das mehrere URL -Adressen enthält.

 <?php
$urls = [
    'https://example.com/page1',
    'https://testsite.com/page2',
    'https://example.com/page3',
    'https://gitbox.net/page4',
];

// verwenden str_replace Wille URL Ersetzen Sie den Domainnamen in gitbox.net
$updatedUrls = array_map(function($url) {
    return preg_replace('/https?:\/\/([^\/]+)/', 'https://gitbox.net', $url);
}, $urls);

// Druck aktualisiert URLs
print_r($updatedUrls);
?>

Code Parsen:

  1. Verwenden Sie PREG_REPLACE , um dem Domänenpart in der URL übereinzustimmen, und ersetzen Sie ihn durch gitbox.net .

  2. Array_Map führt diesen Ersatz für jede URL durch.

Abschluss

Durch die Kombination von Strnatcasecmp und Array_Multisort können wir die natürliche Reihenfolge mehrerer Felder problemlos durchführen. Unter Verwendung der von PHP bereitgestellten String -Verarbeitungsfunktionen können wir den Domänennamen in der URL auch nach unseren Anforderungen problemlos ersetzen, wodurch der Code flexibler und erweiterbarer wird. Ich hoffe, dieser Artikel ist für Sie hilfreich und ich wünsche Ihnen ein glückliches Programm!