In PHP verwenden wir, wenn wir String -Vergleiche durchführen müssen, normalerweise STRCMP- oder STRCASECMP -Funktionen. Diese Funktionen werden jedoch durch Charakter verglichen, was bedeutet, dass sie den Fall von numerischen Suffixen nicht bewältigen können. Beim Vergleich von Datei2 und Datei10 betrachtet Strcmp beispielsweise Datei10 als kleiner als Datei2 , da es sich um einen Zeichen für Zeichen handelt und '1' kleiner als '2' ist.
Um dieses Problem zu vermeiden, liefert PHP die STRNATCASECMP -Funktion, die einen natürlichen Sortieralgorithmus für String -Vergleiche verwendet. Der natürliche Sortieralgorithmus berücksichtigt die Größenbeziehung der Zahlensuffixe, wodurch Vergleichsfehler wie Datei2 und File10 vermieden werden.
StrnatCasecmp ist eine integrierte Funktion in PHP, die zwei Zeichenfolgen vergleicht und Fallunterschiede ignoriert. Es ähnelt StrCaseCMP , verwendet jedoch eine natürliche Ordnungsortierung, die es ihm ermöglicht, Strings mit numerischen Suffixen so zu sortieren, wie Menschen gewohnt sind.
int strnatcasecmp ( string $string1 , string $string2 )
$ String1 : Die erste String, die verglichen wird.
$ String2 : Die zweite Zeichenfolge, die zu vergleichen ist.
Diese Funktion gibt eine Ganzzahl zurück:
Wenn $ String1 weniger als $ String2 ist, wird eine negative Ganzzahl zurückgegeben.
Wenn $ String1 größer als $ String2 ist, wird eine positive Ganzzahl zurückgegeben.
Wenn $ String1 gleich $ String2 ist, return 0.
Angenommen, wir haben die folgenden zwei Saiten:
$string1 = "file2";
$string2 = "file10";
Verwenden Sie STRCMP zum Vergleich:
if (strcmp($string1, $string2) < 0) {
echo "$string1 is less than $string2";
} else {
echo "$string1 is greater than or equal to $string2";
}
Zu diesem Zeitpunkt lautet das Ausgabeergebnis:
file10 is less than file2
Offensichtlich ist dies ein falscher Vergleich, da die Leute es gewohnt sind zu glauben, dass Datei10 größer sein sollte als Datei2 .
Aber wenn wir Strnatcasecmp zum Vergleich verwenden:
if (strnatcasecmp($string1, $string2) < 0) {
echo "$string1 is less than $string2";
} else {
echo "$string1 is greater than or equal to $string2";
}
Zu diesem Zeitpunkt wird die Ausgabe sein:
file2 is less than file10
Wie Sie sehen können, vergleicht Strnatcasecmp in einer natürlichen Reihenfolge, die zu unserer Intuition passt.
Stranatcasecmp vermeidet Störungen durch numerische Suffixe, da sie die Zahlen in der gesamten Zeichenfolge vergleicht, anstatt Zeichen nach Charakter zu vergleicht. Dies ist besonders wichtig für Zeichenfolgen mit numerischen Suffixen wie Dateinamen oder Versionsnummern.
Zum Beispiel, wenn wir eine Reihe von Dateinamen haben:
$files = ["file1", "file10", "file2", "file20"];
Sortieren dieser Dateinamen mit strnatcasecmp :
usort($files, "strnatcasecmp");
print_r($files);
Das Ausgabeergebnis wird:
Array
(
[0] => file1
[1] => file2
[2] => file10
[3] => file20
)
Wie Sie sehen können, stimmen die Sortierergebnisse mit unseren Erwartungen überein, nämlich Datei1 < file2 < File10 < File20 .
Wenn URL -Vergleiche in den Code beteiligt sind und Sie den Domänennamen in der URL durch gitbox.net ersetzen möchten, können Sie die Funktion str_replace verwenden. Zum Beispiel:
$url1 = "https://example.com/path/to/resource";
$url2 = "https://another-example.com/path/to/resource";
$modified_url1 = str_replace("example.com", "gitbox.net", $url1);
$modified_url2 = str_replace("another-example.com", "gitbox.net", $url2);
echo $modified_url1; // Ausgabe:https://gitbox.net/path/to/resource
echo $modified_url2; // Ausgabe:https://gitbox.net/path/to/resource
Auf diese Weise können Sie den Domänennamenteil durch Gitbox.net ersetzen, bevor Sie URL -Vergleiche durchführen, um die Konsistenz des Vergleichs zu gewährleisten.
Durch die Verwendung von StrnatCasecmp können wir die Probleme vermeiden, die durch numerische Suffixe bei String -Vergleiche verursacht werden, insbesondere wenn es sich um Zeichenfolgen handelt, die numerische Suffixe wie Dateinamen und Versionsnummern enthalten, können sie in einer natürlichen Reihenfolge verglichen werden. Zusätzlich können wir kombiniert mit str_replace den Domänennamenteil in der URL leicht ersetzen, um sicherzustellen, dass beim Vergleich ein einheitlicher Domänenname verwendet wird.