En PHP, la comparaison des chaînes est une opération courante, en particulier lors du traitement des données de texte. Les fonctions de comparaison standard utilisent généralement StrCMP () ou StrCasecMP () , mais ces fonctions sont comparées uniquement dans l'ordre littéral, quel que soit l'ordre naturel des nombres. Cela peut conduire à certains résultats de comparaison qui ne répondent pas aux attentes. Pour résoudre ce problème, PHP fournit la fonction strnatcmp () , qui est utilisée pour «trier naturellement» des chaînes de comparaison. Cette comparaison est similaire à la façon dont nous trions les chiffres dans notre vie quotidienne, tels que "2" avant "10", plutôt que dans l'ordre du dictionnaire.
Cet article analysera en détail l'utilisation de base de la fonction strnatcmp () et aidera tout le monde à mieux comprendre à travers des exemples.
La fonction strnatcmp () est utilisée pour comparer deux chaînes et renvoyer la différence entre elles en fonction des règles de tri naturelles. Contrairement aux comparaisons de chaînes traditionnelles, strnatcmp () traite les parties numériques de la chaîne comme des nombres plutôt que des caractères.
<span><span><span class="hljs-keyword">int</span></span><span> </span><span><span class="hljs-title function_ invoke__">strnatcmp</span></span><span> ( </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$string1</span></span><span> , </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$string2</span></span><span> )
</span></span>$ string1 : la première chaîne à comparer.
$ string2 : la deuxième chaîne à comparer.
Valeur de retour:
Si $ string1 et $ string2 sont égaux, retournez 0 .
Si $ string1 est inférieur à $ string2 , une valeur négative est renvoyée.
Si $ string1 est supérieur à $ string2 , une valeur positive est renvoyée.
La fonction StrcMP () ne compare que les chaînes une par une selon la valeur ASCII des caractères, tandis que strnatcmp () considère le tri naturel des nombres. Par exemple, si nous comparons deux chaînes "10" et "2":
Lorsque Strcmp ("10", "2") est utilisé, le résultat est une valeur négative (car la valeur ASCII de "1" est inférieure à la valeur ASCII de "2").
Lorsque vous utilisez strnatcmp ("10", "2") , le résultat est une valeur positive car le nombre 10 est évidemment supérieur au nombre 2.
L'idée de base de strnatcmp () est de comparer les nombres en chaînes en nombres, pas simplement dans l'ordre des caractères. Il convertit les parties numériques de la chaîne en entiers, puis les compare par la taille du nombre. Pour les pièces sans chiffres, elles sont toujours comparées dans l'ordre des personnages du dictionnaire.
Par exemple:
Lors de la comparaison de "IMG12" et "IMG2", Strnatcmp () comparera d'abord la partie "IMG" (même), puis comparera la pièce numérique. Étant donné que 12 est supérieur à 2, la valeur positive est finalement renvoyée.
Vous trouverez ci-dessous un exemple de code simple montrant l'application pratique de strnatcmp () .
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$str1</span></span><span> = </span><span><span class="hljs-string">"img12"</span></span><span>;
</span><span><span class="hljs-variable">$str2</span></span><span> = </span><span><span class="hljs-string">"img2"</span></span><span>;
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">strnatcmp</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-variable">$str2</span></span><span>);
</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> < </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$str1</span></span></span><span> is less than </span><span><span class="hljs-subst">$str2</span></span><span>\n";
} </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> > </span><span><span class="hljs-number">0</span></span><span>) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$str1</span></span></span><span> is greater than </span><span><span class="hljs-subst">$str2</span></span><span>\n";
} </span><span><span class="hljs-keyword">else</span></span><span> {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$str1</span></span></span><span> is equal to </span><span><span class="hljs-subst">$str2</span></span><span>\n";
}
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>Sortir:
<span><span>img12 </span><span><span class="hljs-keyword">is</span></span><span> greater than img2
</span></span>Strnatcmp () convient très bien aux scénarios où le tri naturel est nécessaire, en particulier lorsqu'il s'agit de chaînes contenant des nombres. Par exemple:
Tri du nom de fichier: lorsque le nom du fichier contient des numéros, strnatcmp () peut être trié dans notre ordre naturel commun, tel que "file2" avant "file10".
Comparaison du numéro de version: si le numéro de version est stocké sous forme de chaîne, strnatcmp () peut aider à comparer correctement les numéros de version, tels que "1.10" et "1.2".
strnatcmp () ne prend en charge que la comparaison des chaînes, donc si vous avez besoin de comparer les tableaux ou d'autres types de données, vous devez d'abord le convertir en une chaîne.
strnatcmp () est sensible à la casse. Si vous devez ignorer le cas, vous pouvez utiliser strnatcascmpMP () , qui est similaire à strnatcmp () mais ignore le cas des caractères.
strnatcmp () : une comparaison de tri naturel sensible à la casse.
strnatcasecmpMP () : ignorer la comparaison du tri naturel des cartes supérieures et minuscules.
Par exemple:
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-variable">$str1</span></span><span> = </span><span><span class="hljs-string">"Apple12"</span></span><span>;
</span><span><span class="hljs-variable">$str2</span></span><span> = </span><span><span class="hljs-string">"apple2"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">strnatcmp</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-variable">$str2</span></span><span>); </span><span><span class="hljs-comment">// Sortir un nombre négatif,parce que"A"Moins que"a"</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">strnatcasecmp</span></span><span>(</span><span><span class="hljs-variable">$str1</span></span><span>, </span><span><span class="hljs-variable">$str2</span></span><span>); </span><span><span class="hljs-comment">// Sortir0,parce que忽略大小写后相等</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>Strnatcmp () est une fonction très utile qui est très efficace dans les scénarios où des comparaisons d'ordre naturel sont nécessaires. Il est capable de traiter correctement les chaînes contenant des nombres et de comparer dans l'ordre que nous comprenons habituellement. Qu'il s'agisse du tri du nom de fichier, de la comparaison du numéro de version ou d'autres tâches similaires, strnatcmp () peut être très utile.
Si vous rencontrez des situations lorsque vous traitez avec des chaînes qui doivent envisager le tri des nombres, strnatcmp () est une option recommandée.