Aktueller Standort: Startseite> Neueste Artikel> Wie verwendete ich StrnatCasecmp, um alphanumerische Dateien mit alphanumerischen Dateien zu sortieren?

Wie verwendete ich StrnatCasecmp, um alphanumerische Dateien mit alphanumerischen Dateien zu sortieren?

gitbox 2025-05-29

Bei der Arbeit mit Dateinamen begegnen wir manchmal Szenarien, in denen wir Alphanumeric auf natürliche Weise sortieren müssen. Oft können die Sortierungsergebnisse Probleme haben. Zum Beispiel kann nach alphabetischer Reihenfolge "Datei10.txt" vor "File2.txt" voraus sein, da die Sortierung der Zeichenfolge auf der buchstäblichen Zeichenreihenfolge basiert. Um eine natürliche Sortierung zu erzielen, dh die Zahlen nach der tatsächlichen Größe sortieren, können wir PHPs StrnatCasecmp -Funktion verwenden. In diesem Artikel wird ausführlich erläutert, wie diese Funktion verwendet wird, um die alphanumerische natürliche Sortierung von Dateinamen zu implementieren.

Was ist die STRNATCASECMP -Funktion?

StrnatCasecmp ist eine integrierte Funktion in PHP für die durchfallinsensitive alphanumerische natürliche Sortierung (auch "natürliche Ordnung" genannt). Im Gegensatz zu herkömmlichen String-Vergleichsfunktionen vergleicht StrnatCasecmp die Zahlen-Teile eher nach ihrer numerischen Größe als durch Zeichen-für-Charakter-ASCII-Werte.

Syntax von Strnatcasecmp

 strnatcasecmp(string $string1, string $string2): int
  • $ String1 : Die erste Zeichenfolge, die zu vergleichen ist.

  • $ String2 : Die zweite Zeichenfolge, die zu vergleichen ist.

Diese Funktion gibt die folgenden Werte zurück:

  • Wenn $ String1 weniger als $ String2 ist, wird eine negative Ganzzahl zurückgegeben.

  • Wenn $ String1 gleich $ String2 ist, return 0;

  • Wenn $ String1 größer als $ String2 ist, wird eine positive Ganzzahl zurückgegeben.

Wie kann ich alphanumerische natürliche Sortierung von Dateinamen implementieren?

Angenommen, wir haben ein Array, das Dateinamen enthält. Wir können StrnatCasecmp verwenden, um die Dateinamen zu sortieren. Die spezifischen Schritte sind wie folgt:

  1. Ruft eine Reihe von Dateinamen ab.

  2. Verwenden Sie die Usort -Funktion, um StrnatCasecmp zu kombinieren, um das Dateinamen -Array zu sortieren.

Beispielcode:

 <?php
// Dateiname Array
$files = [
    "file1.txt",
    "file10.txt",
    "file2.txt",
    "file12.txt",
    "file11.txt",
];

// verwenden strnatcasecmp Natürliche Sortierung machen
usort($files, function($a, $b) {
    return strnatcasecmp($a, $b);
});

// Ausgeben des sortierten Dateinamens
foreach ($files as $file) {
    echo $file . "\n";
}
?>

Code Erläuterung:

  1. Array -Definition : Wir definieren zunächst ein Array $ -Dateien mit Dateinamen, die zu Problemen zu sortieren können, nach numerischer Größe.

  2. Natürliche Sortierung : Verwenden Sie die Usort -Funktion, um das Array zu sortieren. Usort benötigt eine Rückruffunktion, um jedes Elementpaar im Array zu vergleichen. Wir verwenden StrnatCasecmp in der Rückruffunktion für die natürliche Sortierung.

  3. Ausgabe sortierte Dateinamen : Nach der Sortierung verwenden wir, um die Ausgabe sortierten Dateinamen zu schleifen , um sicherzustellen, dass sie in natürlicher Reihenfolge angeordnet sind.

Warum Strnatcasecmp wählen?

Im Vergleich zu anderen String -Vergleichsfunktionen kann StrnatCasecmp Dateinamen mit Zahlen korrekt verarbeiten. Es sortiert die Zahlen eher nach numerischer Größe als nach Charaktervergleich. Dies vermeidet das Problem, dass "Datei10" vor "Datei2" eingestuft wird.

Beispielausgabe:

Wenn wir den obigen Code ausführen, wird die Ausgabe sein:

 file1.txt
file2.txt
file10.txt
file11.txt
file12.txt

Wie Sie sehen können, sind die Dateinamen in natürlicher alphanumerischer Reihenfolge sortiert.

Verarbeiten Sie Dateinamen in URLs

In einigen Szenarien müssen wir möglicherweise den Dateinamen aus der URL erhalten und sortieren. Wenn die URL einen Dateinamen enthält, können wir zuerst den Dateinamen extrahieren, indem wir die URL analysieren und dann mit strnatcasecmp sortieren. Wenn die URL beispielsweise einen Dateipfad enthält, können wir Parse_url und BaseName verwenden, um den Dateinamen zu erhalten.

Angenommen, es gibt die folgende URL:

 <?php
// URL Array
$urls = [
    "https://gitbox.net/files/file1.txt",
    "https://gitbox.net/files/file10.txt",
    "https://gitbox.net/files/file2.txt",
];

// Dateinamen extrahieren并Natürliche Sortierung machen
usort($urls, function($a, $b) {
    // Dateinamen extrahieren
    $fileA = basename(parse_url($a, PHP_URL_PATH));
    $fileB = basename(parse_url($b, PHP_URL_PATH));

    // verwenden strnatcasecmp Vergleichen Sie Dateinamen
    return strnatcasecmp($fileA, $fileB);
});

// Ausgabe sortiert URL
foreach ($urls as $url) {
    echo $url . "\n";
}
?>

URL -Erläuterung:

  1. Wir definieren zunächst ein Array $ URLs mit URLs.

  2. Verwenden Sie die Funktion PARSE_URL , um den Pfadteil in der URL zu extrahieren, und verwenden Sie den Basisname , um den Dateinamen zu erhalten.

  3. Verwenden Sie StrnatCasecmp , um Dateinamen auf natürliche Weise zu sortieren.

Beispielausgabe:

 https://gitbox.net/files/file1.txt
https://gitbox.net/files/file2.txt
https://gitbox.net/files/file10.txt

Zusammenfassen

Durch die Verwendung der STRNATCASECMP -Funktion in PHP können wir die alphanumerische Reihenfolge von Dateinamen problemlos implementieren, um sicherzustellen, dass die numerischen Teile in den Dateinamen nach numerischer Größe sortiert werden. Egal, ob das Dateiname -Array sortiert oder die Dateinamen aus der URL extrahiert und extrahiert und aus der URL extrahiert und sortiert wird, Strnatcasecmp kann uns helfen, das korrekte Sortierergebnis zu erzielen.

Ich hoffe, dieser Artikel wird für Sie hilfreich sein, um die Verwendung der StrnatCasecmp -Funktion zu verstehen. Wenn Sie Fragen haben, können Sie sich gerne Fragen stellen!