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.
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
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.
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
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.
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.