Eine wichtige Funktion der STRNATCASTECMP -Funktion ist, dass sie beim Vergleich den Fall ignoriert. Manchmal verstehen Programmierer das Verhalten der Funktion falsch und versuchen, bei fallempfindlichen Vergleiche zu arbeiten. Wenn Sie einen Fall-sensitiver natürlicher Sortiervergleich benötigen, sollten Sie Strnatcmp verwenden (nicht ignorieren).
// Beispiel für die Fehlerverwendung
$string1 = 'abc';
$string2 = 'ABC';
if (strnatcasecmp($string1, $string2) === 0) {
echo 'Strings are equal ignoring case.';
} else {
echo 'Strings are different ignoring case.';
}
In dem obigen Code zeigt das Ergebnis, da Strnatcasecmp ignoriert, dass der obere und untere Fall ignoriert, dass die Zeichenfolge gleich ist. Wenn eine Fallempfindlichkeit erforderlich ist, sollte StrnatCMP verwendet werden.
Ein wichtiges Merkmal der natürlichen Sortierung ist, dass Zahlen eher nach ihren Werten als nach den Zeichen nacheinander verglichen werden. Dies kann dazu führen, dass einige Programmierer die korrekte Sortierung von Zahlen in Saiten ignorieren. Insbesondere im Umgang mit Zahlen, die Zahlen enthalten, müssen wir sicherstellen, dass die numerischen Teile in der erwarteten natürlichen Reihenfolge sortiert sind.
Zum Beispiel:
// Beispiel für die Fehlerverwendung
$string1 = 'item20';
$string2 = 'item3';
if (strnatcasecmp($string1, $string2) < 0) {
echo 'item20 comes before item3';
} else {
echo 'item3 comes before item20';
}
Die natürliche Sorte sollte zuerst und Item20 hinter sich sein, aber da die Zeichenfolgen in der Wörterbuchreihenfolge verglichen werden (d. H. Charakter-für-Charakter-Vergleich), wird das falsche Ergebnis ausgegeben. strnatcasecmp wird nach der Größe der Nummer sortiert, sodass Item20 nach Punkt3 eingestuft werden sollte.
Stranatcasecmp kann beim Vergleich von Zeichenfolgen, die Sonderzeichen (wie Leerzeichen, Interpunktion usw.) enthalten, unerwartete Ergebnisse liefern. Beispielsweise können für Zeichenfolgen, die Räume enthalten, die Räume die Reihenfolge der Zeichenfolgen beeinflussen, sodass diese Details bei Verwendung dieser Funktion besondere Aufmerksamkeit geschenkt werden sollten.
// Beispiel für die Fehlerverwendung
$string1 = 'hello world';
$string2 = 'helloworld';
if (strnatcasecmp($string1, $string2) === 0) {
echo 'Strings are equal ignoring case.';
} else {
echo 'Strings are different ignoring case.';
}
Zu diesem Zeitpunkt werden Hello World und HelloWorld fälschlicherweise verschiedene Saiten angesehen, da der Raum in der Mitte im Vergleich als besonderer Charakter angesehen wird.
Wenn Sie einen Fall-sensitiver natürlicher Sortiervergleich durchführen müssen, sollten Sie Strnatcmp anstelle von strnatcasecmp verwenden. Zum Beispiel:
// Beispiel für die Nutzung
$string1 = 'abc';
$string2 = 'ABC';
if (strnatcmp($string1, $string2) === 0) {
echo 'Strings are equal considering case.';
} else {
echo 'Strings are different considering case.';
}
STRNATCASECMP behandelt beim Vergleich von Zeichenfolgen automatisch die natürliche Sortierung von Zahlen. Stellen Sie also sicher, dass die an strnatcasecmp übergebene Zeichenfolge im richtigen Format ist, Sie können korrekte Zeichenfolgen mit Zahlen vergleichen.
// Beispiel für die Nutzung
$string1 = 'item20';
$string2 = 'item3';
if (strnatcasecmp($string1, $string2) < 0) {
echo 'item3 comes before item20';
} else {
echo 'item20 comes before item3';
}
Um sicherzustellen, dass die in der Zeichenfolge enthaltenen Sonderzeichen nicht die natürliche Sortierung beeinflussen, kann die Zeichenfolge vor dem Vergleich vorverarbeitet werden. Entfernen Sie beispielsweise unnötige Räume oder Zeichensetzung oder stellen Sie sicher, dass sich alle Zeichenfolgen vor dem Vergleich in einem konsistenten Format befinden.
// Vorverarbeitungsräume und Sonderzeichen
$string1 = 'hello world';
$string2 = 'helloworld';
$string1 = str_replace(' ', '', $string1);
$string2 = str_replace(' ', '', $string2);
if (strnatcasecmp($string1, $string2) === 0) {
echo 'Strings are equal after removing spaces.';
} else {
echo 'Strings are different after removing spaces.';
}
Durch die Vorverarbeitung können Sonderzeichen wie Leerzeichen vermieden werden, indem sie das Ergebnis des String -Vergleichs beeinflussen.