Aktueller Standort: Startseite> Neueste Artikel> Wie vergleichen Sie internationalisierte Zeichenfolgen mit verschiedenen oberen und unteren Fällen mit Strnatcasecmp?

Wie vergleichen Sie internationalisierte Zeichenfolgen mit verschiedenen oberen und unteren Fällen mit Strnatcasecmp?

gitbox 2025-05-26

In der PHP -Entwicklung ist der String -Vergleich einer der häufigsten Operationen. Insbesondere beim Umgang mit Benutzereingaben, Dateinamensortierungen oder Implementierung von Suchfunktionen ist das korrekte Vergleich von Zeichenfolgen mit verschiedenen oberen und unteren Fällen, insbesondere von Zeichenfolgen, die internationale Zeichen enthalten, ein Problem, das nicht ignoriert werden kann. Die STRNATCASECMP -Funktion ist ein Tool, das speziell für diese natürliche Reihenfolge, für den Fall-unempfindlichen String-Vergleich entwickelt wurde, entwickelt.

Was ist Strnatcasecmp ?

StrnatCasecmp ist eine integrierte Funktion, die von PHP zum Vergleich von zwei Zeichenfolgen bereitgestellt wird. Seine Vergleichsmethode ist in "natürlicher Reihenfolge" und ist von Fall unempfindlich. Dies bedeutet, dass es in der Reihenfolge verglichen werden kann, die menschlich gewohnheitsmäßig versteht, zum Beispiel:

 echo strnatcasecmp("image1.jpg", "Image10.jpg");

Der obige Code gibt eine negative Zahl zurück und gibt an, dass Bild1.jpg kleiner als Image10.jpg ist, da "1" vor "10" liegt.

Grundlegende Syntax:

 int strnatcasecmp(string $string1, string $string2)
  • Der Rückgabewert ist eine Ganzzahl:

    • <0 : String1 ist weniger als String2

    • = 0 : Zwei Zeichenfolgen sind gleich

    • > 0 : String1 ist größer als String2

Warum ist Strnatcasecmp für "natürliche Ordnung" besser geeignet als für Strnatcasecmp ?

Der Standard -StrCasecmp vergleicht die ASCII -Werte von Zeichenbuchstaben nach Buchstaben, unabhängig von der Bedeutung von Zahlen in der Zeichenfolge. Strnatcasecmp nimmt "natürliches Sortieren" an, was bedeutet, dass es die Zahlen in der gesamten Zeichenfolge behandelt. Zum Beispiel:

 var_dump(strcasecmp("file2.txt", "file10.txt")); // zurückkehren > 0
var_dump(strnatcasecmp("file2.txt", "file10.txt")); // zurückkehren < 0

Dies macht StrnatCasecmp besonders geeignet für Zeichenfolgenvergleiche mit Zahlen wie Dateinamen, Versionsnummern usw.

Wie geht es mit internationalen Saiten um?

Obwohl Strnatcasecmp den Fall von ASCII-Buchstaben korrekt behandelt, hat es keine "vollständig internationale" Unterstützung, wenn es um internationale Zeichen geht (z. B. lateinische Buchstaben mit diakritischen Notizen, Nicht-Latin-Zeichen usw.). Das heißt, für einige Multibyte -Charaktere kann es sich möglicherweise nicht wie erwartet verhalten.

Zum Beispiel:

 echo strnatcasecmp("café", "CAFé");

Dieser Vergleich kann nicht zwei Zeichenfolgen gleich berücksichtigen, abhängig von der zugrunde liegenden Charaktercodierung und der internen Implementierung von PHP.

Alternative: Collator mit Intl -Erweiterung

Wenn Sie ein wirklich internationales, sprachempfindliches Sortierverhalten benötigen, können Sie die Collator- Klasse in der INTL- Erweiterung von PHP verwenden:

 $collator = new Collator('fr_FR');
echo $collator->compare("café", "CAFé"); // Ausgabe 0,Zeigt Gleichheit an

Collator unterstützt mehrere Sprachen und Orte, die besser mit internationalen Charakteren umgehen können.

Beispiele in praktischen Anwendungen

Angenommen, Sie möchten die hochgeladenen Dateinamen in einer Website sortieren, wenn man bedenkt, dass Benutzer Dateinamen mit unterschiedlichen Fällen hochladen und auch Zahlen haben. Hier finden Sie einen Beispielcode mit StrnatCasecmp :

 $files = ["image10.jpg", "Image2.jpg", "image1.JPG", "Image20.jpg"];

usort($files, function($a, $b) {
    return strnatcasecmp($a, $b);
});

foreach ($files as $file) {
    echo "<a href='https://gitbox.net/uploads/{$file}'>{$file}</a><br>";
}

Das Ausgangsergebnis ist:

 image1.JPG
Image2.jpg
image10.jpg
Image20.jpg

Es ist ersichtlich, dass die Sortierergebnisse mit den natürlichen Gewohnheiten des Menschen übereinstimmen und den Fall von Dateinamen ignorieren.

Zusammenfassen

  • Strnatcasecmp ist ein leistungsstarkes und praktisches Instrument, um Saiten in "natürlicher Reihenfolge" ohne Fallempfindlichkeit zu vergleichen.

  • Es ist besonders für Zeichenfolgen mit Zahlen wie Dateinamen, Beschriftungen, Versionsnummern usw. geeignet.

  • Für Vergleiche, die internationale Charaktere enthalten, ist Strnatcasecmp möglicherweise nicht ideal und es wird empfohlen, den INTL Extended Collator zu diesem Zeitpunkt zu verwenden.

Durch das Beherrschen der Verwendung von StrnatCasecmp können Sie die Benutzereingabe und die Sortierung der Logik natürlicher verarbeiten und Ihre PHP-Anwendungen intelligenter und benutzerfreundlich gestalten.