Position actuelle: Accueil> Derniers articles> Comment utiliser StrnatcasecMP pour la comparaison du numéro de version?

Comment utiliser StrnatcasecMP pour la comparaison du numéro de version?

gitbox 2025-05-20

Lors de la rédaction de programmes, il est souvent nécessaire de comparer les numéros de version. Par exemple, comparez l'ordre de deux numéros de version ou organisez-les dans l'ordre naturel des numéros de version lorsqu'il est affiché. Bien que nous puissions utiliser les fonctions de comparaison de chaîne traditionnelles strcmp () ou strcascmpMP () pour effectuer la comparaison du numéro de version, aucune de ces éléments ne prend en compte la règle de version de "tri naturel" - c'est-à-dire la comparaison des tailles numériques.

Heureusement, PHP fournit une fonction très pratique strnatcasecmp () , qui peut comparer deux numéros de version d'une manière "naturellement triée", en tenant compte de la relation de taille des nombres. Cet article présentera comment utiliser la fonction strnatcasecmp () pour effectuer la comparaison du numéro de version et implémenter le tri naturel.

Qu'est-ce que le tri naturel?

Dans les comparaisons traditionnelles de cordes, les nombres sont comparés dans l'ordre littéral des caractères. Par exemple:

 strcmp('10', '2'); // La valeur de retour est supérieure à0

Dans la comparaison ci-dessus, «10» est considéré comme supérieur à «2» , ce qui n'est évidemment pas conforme à notre type intuitif de numéros de version.

L'objectif du tri naturel est de comparer les nombres comme des «valeurs numériques» plutôt que comme des cordes. Par conséquent, «10» devrait être classé après «2» .

Introduction à la fonction strnatcasecmmp

StrnatcasecMP () est une fonction fournie par PHP qui compare deux chaînes basées sur des règles de tri naturelles, mais elle est insensible à la casse. Cette fonction est souvent utilisée dans des scénarios où il doit être trié par des nombres, tels que la comparaison des numéros de version.

Prototype de fonction

 int strnatcasecmp ( string $string1 , string $string2 )
  • Paramètre :

    • $ string1 : la première chaîne à comparer avec $ string2 .

    • $ string2 : la deuxième chaîne à comparer avec $ string1 .

  • Valeur de retour :

    • Si $ string1 est inférieur à $ string2 , une valeur négative est renvoyée.

    • Si $ string1 est égal à $ string2 , retournez 0.

    • Si $ string1 est supérieur à $ string2 , une valeur positive est renvoyée.

Utilisez strnatcasecMP pour la comparaison du numéro de version

Supposons que nous ayons deux numéros de version, 1.2.10 et 1.2.2 , nous voulons comparer leurs tailles, et le tri correct devrait être 1.2.2 avant 1.2.10 . Nous pouvons le faire en utilisant la fonction strnatcasecmp () .

Exemple de code:

 <?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";
}
?>

Sortir:

 1.2.10 is greater than 1.2.2

Dans cet exemple, StrnatcasecMP () juge correctement que 1.2.10 est supérieur à 1.2.2 selon les règles de tri naturelles.

Scénarios d'application de tri naturel

En plus de la comparaison du numéro de version, strnatcasecmp () est utile dans de nombreux autres scénarios qui nécessitent un tri naturel. Par exemple:

  • Triez le numéro de version dans le nom du fichier.

  • Lorsque la liste de téléchargement s'affiche, organisez les packages par numéro de version.

  • Triez les chaînes avec des chiffres et des lettres.

Exemple: trier la liste des numéros de version

Supposons que nous ayons une liste de numéros de version et que nous voulons trier par des règles de tri naturelles. Vous pouvez utiliser la fonction USORT () combinée avec strnatcascmpMP () pour l'implémenter:

 <?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);
?>

Sortir:

 Array
(
    [0] => 1.1.1
    [1] => 1.2.2
    [2] => 1.2.9
    [3] => 1.2.10
    [4] => 1.10.0
)

Comme indiqué ci-dessus, la fonction USORT () trie les numéros de version en fonction des règles de tri naturelles, assurant l'ordre correct.

Résumer

StrnatcasecMP () est une fonction très utile, en particulier lorsque des comparaisons de numéro de version ou un tri naturel sont nécessaires. Il est différent de la fonction de comparaison de chaîne traditionnelle et peut traiter correctement les chaînes contenant des nombres, ce qui rend la comparaison entre les nombres plus conformément à l'intuition humaine. Qu'il s'agisse de comparer deux numéros de version ou de trier la liste des numéros de version, strnatcasecmpMP () est un très bon choix.


J'espère que cet article peut vous aider à mieux comprendre et utiliser la fonction strnatcasecmp () en PHP pour obtenir la comparaison du numéro de version et le tri naturel!