En PHP, la fonction strnatcmp est un outil pour comparer l'ordre naturel (type naturel) de deux chaînes. Il est différent des fonctions de comparaison de chaînes régulières telles que StrCMP car StrnatCMP trie par la taille du nombre, pas seulement par la valeur ASCII du caractère. Il est très important pour les développeurs de comprendre comment les valeurs positives et négatives renvoyées par cette fonction fonctionnent et comment gérer correctement ces résultats.
Le prototype de la fonction strnatcmp est le suivant:
<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">$str1</span></span><span> , </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str2</span></span><span> )
</span></span>
Cette fonction prend deux paramètres de chaîne $ STR1 et $ STR2 et renvoie une valeur entière représentant le résultat de la comparaison des commandes naturelles des deux chaînes.
Si $ STR1 est inférieur à $ STR2 , une valeur négative est retournée;
Si $ STR1 est égal à $ STR2 , retournez 0;
Si $ STR1 est supérieur à $ STR2 , une valeur positive est retournée.
Retour valeur négative:
Lorsque StrnatCMP renvoie une valeur négative, cela signifie que la première chaîne $ STR1 est classée avant la deuxième chaîne $ str2 en nature naturelle. Par exemple:
<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-string">"apple10"</span></span><span>, </span><span><span class="hljs-string">"apple2"</span></span><span>); </span><span><span class="hljs-comment">// Valeur négative de sortie</span></span><span>
</span></span>
Dans cet exemple, "Apple10" sera trié naturellement avant "Apple2" car le nombre 10 est supérieur au nombre 2.
Retour 0:
Si les deux chaînes sont les mêmes dans le tri naturel, Strnatcmp reviendra 0. Par exemple:
<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-string">"apple2"</span></span><span>, </span><span><span class="hljs-string">"apple2"</span></span><span>); </span><span><span class="hljs-comment">// Sortir0</span></span><span>
</span></span>
Ici, les deux chaînes sont exactement les mêmes, alors retournez 0.
Renvoie la valeur positive:
Lorsque StrnatCMP renvoie une valeur positive, cela signifie que la première chaîne $ STR1 est classée après la deuxième chaîne $ str2 en nature naturelle. Par exemple:
<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-string">"apple20"</span></span><span>, </span><span><span class="hljs-string">"apple2"</span></span><span>); </span><span><span class="hljs-comment">// Sortir正值</span></span><span>
</span></span>
Dans cet exemple, "Apple20" est classé après "Apple2" en nature naturel car le nombre 20 est supérieur au nombre 2.
Comparaison simple:
Si vous souhaitez simplement déterminer lequel des deux chaînes est plus grand, vous pouvez utiliser directement la valeur de retour. Par exemple:
<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> Classé dans </span><span><span class="hljs-subst">$str2</span></span><span> Devant";
} </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> Classé dans </span><span><span class="hljs-subst">$str2</span></span><span> plus tard";
} </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> et </span><span><span class="hljs-subst">$str2</span></span><span> même";
}
</span></span>
Cette méthode de traitement convient aux scénarios où le tri ou la comparaison est requis.
Utilisation dans le tri:
StrnatCMP est souvent utilisé pour le tri naturel des tableaux, en particulier lorsqu'il s'agit de chaînes contenant des nombres. Si vous souhaitez trier les tableaux dans l'ordre naturel, vous pouvez utiliser la fonction USORT en conjonction avec strnatcmp :
<span><span><span class="hljs-variable">$array</span></span><span> = [</span><span><span class="hljs-string">"apple10"</span></span><span>, </span><span><span class="hljs-string">"apple2"</span></span><span>, </span><span><span class="hljs-string">"apple20"</span></span><span>, </span><span><span class="hljs-string">"apple1"</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>, </span><span><span class="hljs-string">'strnatcmp'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$array</span></span><span>);
</span></span>
Ce sera sorti:
<span><span>Array
(
[</span><span><span class="hljs-meta">0</span></span><span>] => apple1
[</span><span><span class="hljs-meta">1</span></span><span>] => apple2
[</span><span><span class="hljs-meta">2</span></span><span>] => apple10
[</span><span><span class="hljs-meta">3</span></span><span>] => apple20
)
</span></span>
Gestion des situations complexes:
Parfois, nous devons comparer des chaînes plus complexes, telles que la chaîne contenant des dates, des numéros de version, etc. Dans ce cas, Strnatcmp peut nous aider à comparer dans l'ordre naturel sans nous soucier des parties numériques de la chaîne à tort par rapport aux caractères.
<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-string">"version 10.1"</span></span><span>, </span><span><span class="hljs-string">"version 9.9"</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">"version 10.1 Comparer version 9.9 renouveler"</span></span><span>;
}
</span></span>
La sortie sera: la version 10.1 est mise à jour que la version 9.9 , qui montre que StrnatCMP gère correctement les numéros de version dans l'ordre naturel.
StrnatCMP est une fonction PHP très utile qui compare les chaînes à travers des règles de tri naturelles, en particulier lorsqu'elle traite des chaînes avec des nombres, ce qui peut fournir une méthode de tri plus intuitive. Comprendre les significations positives et négatives des valeurs de retour et pouvoir les gérer correctement peut aider les développeurs à effectuer des opérations de comparaison et de tri les opérations plus efficacement.