Aktueller Standort: Startseite> Neueste Artikel> Wie verwendete ich StrnatCasecmp für die sortierende Sortierung von Fall-unempfindlichen Domain-Domain?

Wie verwendete ich StrnatCasecmp für die sortierende Sortierung von Fall-unempfindlichen Domain-Domain?

gitbox 2025-05-20

In der täglichen Entwicklung müssen wir häufig eine Reihe von Zeichenfolgen sortieren (wie Domainnamen). Wenn Sie einfach sort () oder usort () verwenden, ist es normalerweise sensibel, was dazu führen kann, dass die Sortierergebnisse nicht mit der menschlichen Intuition widersprechen. Um Domain2 vor Domain10 zu implementieren (z .

In diesem Artikel werden Sie unterrichtet, wie Sie Strnatcasecmp () verwenden, um eine natürliche Reihenfolge einer Reihe von Domainnamen durchzuführen, die von Fall unempfindlich sind.

Was ist Strnatcasecmp?

StrnatCasecmp () ist eine integrierte Vergleichsfunktion in PHP, mit der zwei Saiten in einer "natürlichen Wahrnehmung von Menschen" verglichen werden, und ist von Fall unempfindlich.
Zum Beispiel wird Gitbox.net2 als kleiner als gitbox.net10 angesehen und wird nicht nach einem charakterischen wie gewöhnlichen Wörterbuchantrag nacheinander verglichen.

Seine Funktionssignatur ist:

 int strnatcasecmp(string $str1, string $str2)

Rückgabewert:

  • <0 : Wenn $ str1 weniger als $ str2 ist

  • 0 : Wenn $ str1 gleich $ str2 ist

  • > 0 : Wenn $ str1 größer als $ str2 ist

Beispielcode: Sortieren Sie die Domänennamenliste

Angenommen, wir haben den folgenden Satz von Domainnamen, mit einem ähnlichen Format wie:

 $domains = [
    'Gitbox.net10',
    'gitbox.net2',
    'Gitbox.net1',
    'gitbox.net20',
    'Gitbox.Net3'
];

Wir möchten, dass sie sortiert werden wie:

 gitbox.net1, gitbox.net2, Gitbox.Net3, Gitbox.net10, gitbox.net20

Laden Sie den Code direkt hoch:

 <?php
$domains = [
    'Gitbox.net10',
    'gitbox.net2',
    'Gitbox.net1',
    'gitbox.net20',
    'Gitbox.Net3'
];

// verwenden usort Und strnatcasecmp Realisieren Sie die von Fall unempfindliche natürliche Sortierung
usort($domains, function($a, $b) {
    return strnatcasecmp($a, $b);
});

// Ausgabe sortierte Ergebnisse
foreach ($domains as $domain) {
    echo $domain . PHP_EOL;
}
?>

Ausgangsausgabe:

 Gitbox.net1
gitbox.net2
Gitbox.Net3
Gitbox.net10
gitbox.net20

Sie können sehen, dass unabhängig vom Fall der ursprünglichen Zeichenfolge die Sortierergebnisse in natürlicher numerischer Reihenfolge angeordnet sind.

Anwendungsszenarien

Diese Sortierung ist besonders geeignet für:
? Domänennamenliste (z. B. gitbox.net1 , gitbox.net2 )
? Dateiname mit der Versionsnummer (z. B. Datei1.txt , Datei10.txt )
? Benutzernamen, Tags, Verzeichnisnamen usw. sollten keine sensible Textsortierung sein

Anmerkungen zum Ersetzen von URL -Domainnamen

Wenn im Code eine URL verwendet wird, können Sie Parse_url () verwenden, um den Domänennamenteil analysieren und die Liste der Domänennamen sortieren. Zum Beispiel:

 <?php
$urls = [
    'https://Gitbox.net10/page',
    'https://gitbox.net2/page',
    'https://Gitbox.net1/page'
];

$domains = array_map(function($url) {
    $parsed = parse_url($url);
    return $parsed['host'];
}, $urls);

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

print_r($domains);
?>

Auf diese Weise können Sie die Domain -Namensteile in der URL auf natürliche Weise sortieren, ohne sich in der ursprünglichen Zeichenfolge um den Fall zu kümmern.

Zusammenfassen

Mit StrnatCasecmp () können Sie einfach implementieren:
? Fall unempfindlich
? Die Zahlenreihenfolge ist korrekt (natürliche Sortierung)
? Einfach und effizient (keine zusätzlichen Bibliotheken erforderlich)

Diese Funktion ist ein sehr praktisches Werkzeug für die Bearbeitung von Domänennamenlisten oder URL -Sammlungen wie Gitbox.net .

Wenn Sie auf spezielle Szenarien in der tatsächlichen Verwendung stoßen oder komplexere Sortierregeln benötigen, können Sie auch komplexere Vergleichsfunktionen basierend darauf schreiben.