Beim Schreiben von Programmen ist es häufig erforderlich, Versionsnummern zu vergleichen. Vergleichen Sie beispielsweise die Reihenfolge zweier Versionsnummern oder ordnen Sie sie in der natürlichen Reihenfolge der Versionsnummern an, wenn Sie angezeigt werden. Obwohl wir die herkömmlichen String -Vergleichsfunktionen mit Strcmp () oder strCasecmp () verwenden können, um den Vergleich der Versionszahlen durchzuführen, berücksichtigt keiner dieser Vergleiche der "natürlichen Sortierung" der Versionsnummer - dh den Vergleich der numerischen Größen.
Glücklicherweise bietet PHP eine sehr praktische Funktion Strnatcasecmp () , mit der zwei Versionsnummern unter Berücksichtigung der Größenbeziehung von Zahlen in "natürlich sortierter" Weise verglichen werden können. In diesem Artikel wird vorgestellt, wie die Funktion "StrnatCasecmp () verwendet wird, um den Vergleich der Versionsnummer durchzuführen und natürliche Sortierung zu implementieren.
In traditionellen String -Vergleiche werden Zahlen in buchstäblicher Reihenfolge der Zeichen verglichen. Zum Beispiel:
strcmp('10', '2'); // Der Rückgabewert ist größer als0
Im obigen Vergleich wird '10' als größer als '2' angesehen, was offensichtlich nicht unseren intuitiven Versionsnummern entspricht.
Das Ziel der natürlichen Sortierung ist es, Zahlen als "numerische Werte" und nicht als Zeichenfolgen zu vergleichen. Daher sollte '10' nach '2' eingestuft werden.
StrnatCasecmp () ist eine Funktion, die von PHP bereitgestellt wird, die zwei Zeichenfolgen vergleicht, die auf natürlichen Sortierregeln basieren, aber es ist eine unempfindliche. Diese Funktion wird häufig in Szenarien verwendet, in denen sie nach Zahlen sortiert werden muss, wie z. B. Vergleich von Versionsnummern.
int strnatcasecmp ( string $string1 , string $string2 )
Parameter :
$ String1 : Die erste Zeichenfolge, die mit $ String2 verglichen wird.
$ string2 : Die zweite Zeichenfolge, die mit $ String1 verglichen wird.
Rückgabewert :
Wenn $ String1 weniger als $ String2 ist, wird ein negativer Wert zurückgegeben.
Wenn $ String1 gleich $ String2 ist, return 0.
Wenn $ String1 größer als $ String2 ist, wird ein positiver Wert zurückgegeben.
Angenommen, wir haben zwei Versionsnummern, 1.2.10 und 1.2.2 , wir möchten ihre Größen vergleichen, und die richtige Sortierung sollte 1.2.2 vor 1.2.10 sein. Wir können dies mit der Funktion strnatcasecmp () tun.
<?php
$version1 = '1.2.10';
$version2 = '1.2.2';
if (strnatcasecmp($version1, $version2) < 0) {
echo "$version1 is less than $version2\n";
} elseif (strnatcasecmp($version1, $version2) > 0) {
echo "$version1 is greater than $version2\n";
} else {
echo "$version1 is equal to $version2\n";
}
?>
1.2.10 is greater than 1.2.2
In diesem Beispiel beurteilt StrnatCasecmp () korrekt, dass 1.2.10 gemäß den natürlichen Sortierregeln größer als 1.2.2 ist.
Neben dem Vergleich der Versionsnummer ist StrnatCasecmp () in vielen anderen Szenarien nützlich, die eine natürliche Sortierung erfordern. Zum Beispiel:
Sortieren Sie die Versionsnummer im Dateinamen.
Wenn die Download -Liste angezeigt wird, ordnen Sie die Pakete nach Versionsnummer an.
Sortieren Sie Saiten mit Zahlen und Buchstaben.
Angenommen, wir haben eine Liste von Versionsnummern und möchten nach natürlichen Sortierregeln sortieren. Sie können die usort () -Funktion in Kombination mit strnatcasecmp () verwenden, um sie zu implementieren:
<?php
$versions = ['1.2.10', '1.2.2', '1.1.1', '1.10.0', '1.2.9'];
usort($versions, function($a, $b) {
return strnatcasecmp($a, $b);
});
print_r($versions);
?>
Array
(
[0] => 1.1.1
[1] => 1.2.2
[2] => 1.2.9
[3] => 1.2.10
[4] => 1.10.0
)
Wie oben gezeigt, sortiert die Funktion usort () die Versionsnummern nach natürlichen Sortierregeln, um die richtige Reihenfolge sicherzustellen.
StrnatCasecmp () ist eine sehr nützliche Funktion, insbesondere wenn Versionszahlvergleiche oder natürliche Sortierungen erforderlich sind. Es unterscheidet sich von der herkömmlichen String -Vergleichsfunktion und kann korrekt verarbeiten Strings, die Zahlen enthalten, wodurch der Vergleich zwischen Zahlen mehr mit der menschlichen Intuition übereinstimmt. Unabhängig davon, ob es zwei Versionsnummern verglichen oder die Versionsnummer -Liste sortiert, ist StrnatCasecmp () eine sehr gute Wahl.
Ich hoffe, dieser Artikel kann Ihnen helfen, die Funktion von StrnatCasecmp () in PHP besser zu verstehen und zu verwenden, um den Vergleich der Versionszahlen und die natürliche Sortierung zu erreichen!