Position actuelle: Accueil> Derniers articles> Comment utiliser la fonction StrnatCMP de PHP pour normaliser la chaîne entrée par l'utilisateur?

Comment utiliser la fonction StrnatCMP de PHP pour normaliser la chaîne entrée par l'utilisateur?

gitbox 2025-09-09

Dans PHP, StrnatCMP est une fonction très pratique qui peut être utilisée pour comparer les chaînes "naturellement triées". Le tri naturel est le tri par la taille réelle des nombres, pas seulement par l'ordre littéral des personnages. Cette approche est particulièrement utile lorsque vous traitez des chaînes contenant des nombres, en particulier lorsque nous devons comparer l'entrée des utilisateurs. Cet article présentera comment utiliser la fonction strnatcmp pour normaliser la chaîne entrée par l'utilisateur et utiliser quelques exemples pour afficher son scénario d'application.

1. Quelle est la fonction strnatcmp ?

StrnatCMP est une fonction de PHP pour comparer deux chaînes. Contrairement aux fonctions de comparaison de chaînes ordinaires telles que STRCMP , StrnatCMP prend en compte la taille des nombres, il peut donc "trier naturellement" la chaîne en fonction de la partie numérique de la chaîne. Cela signifie que dans le tri naturel, "10" sera considéré comme plus grand que "2", plutôt qu'une comparaison littérale.

La signature de la fonction est la suivante:

 <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>
  • Valeur de retour : renvoyez un entier représentant le résultat de comparaison de la chaîne:

    • Retour numéro négatif: signifie $ string1 est inférieur à $ string2

    • Retour numéro positif: signifie $ string1 est supérieur à $ string2

    • Retour 0: signifie que les deux chaînes sont égales

2. Pourquoi avez-vous besoin de strnatcmp ?

Les fonctions de comparaison traditionnelles de chaînes (telles que StrCMP ) peuvent produire des résultats intuitifs intuitifs lors de la comparaison des chaînes contenant des nombres. Par exemple:

 <span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">strcmp</span></span><span>(</span><span><span class="hljs-string">'10'</span></span><span>, </span><span><span class="hljs-string">'2'</span></span><span>); </span><span><span class="hljs-comment">// Sortir un nombre positif</span></span><span>
</span></span>

Cela indique que 10 est supérieur à 2 , mais dans le contexte du tri naturel, le nombre 10 devrait être après 2. StranAtCMP peut résoudre ce problème:

 <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">'10'</span></span><span>, </span><span><span class="hljs-string">'2'</span></span><span>); </span><span><span class="hljs-comment">// Nombre négatif de sortie,exprimer '10' Moins que '2'</span></span><span>
</span></span>

3. Comment utiliser StrnatCMP pour une comparaison standardisée?

Supposons que vous travaillez sur un formulaire où l'utilisateur a entré plusieurs chaînes (telles que le nom de fichier, le numéro de version ou d'autres chaînes contenant des numéros) et que vous souhaitez normaliser le tri ou la comparaison de ces chaînes. L'utilisation de strnatcmp vous permet de trier ces chaînes raisonnablement en fonction du tri naturel.

Exemple 1: Triez naturellement les noms de fichiers entrés par l'utilisateur

 <span><span><span class="hljs-comment">// Supposons que l&#39;utilisateur a entré le nom de fichier suivant</span></span><span>
</span><span><span class="hljs-variable">$files</span></span><span> = [</span><span><span class="hljs-string">'file10.txt'</span></span><span>, </span><span><span class="hljs-string">'file2.txt'</span></span><span>, </span><span><span class="hljs-string">'file1.txt'</span></span><span>, </span><span><span class="hljs-string">'file20.txt'</span></span><span>];

</span><span><span class="hljs-comment">// utiliser usort et strnatcmp Trier naturellement</span></span><span>
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$files</span></span><span>, </span><span><span class="hljs-string">'strnatcmp'</span></span><span>);

</span><span><span class="hljs-comment">// Sortir le nom de fichier trié</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$files</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$file</span></span><span> . </span><span><span class="hljs-string">"\n"</span></span><span>;
}
</span></span>

Résultat de sortie:

 <span><span>file1.txt
file2.txt
file10.txt
file20.txt
</span></span>

Dans cet exemple, StrnatCMP garantit que les noms de fichiers sont triés par la taille des nombres, et non dans l'ordre des caractères.

Exemple 2: Comparaison des numéros de version entrés par les utilisateurs

Un autre scénario d'utilisation commun est de comparer les numéros de version. Supposons que l'utilisateur soit entré deux numéros de version et que vous souhaitez comparer leurs tailles:

 <span><span><span class="hljs-variable">$version1</span></span><span> = </span><span><span class="hljs-string">'1.10.2'</span></span><span>;
</span><span><span class="hljs-variable">$version2</span></span><span> = </span><span><span class="hljs-string">'1.9.9'</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">$version1</span></span><span>, </span><span><span class="hljs-variable">$version2</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> &lt; </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">$version1</span></span></span><span> is less than </span><span><span class="hljs-subst">$version2</span></span><span>\n";
} </span><span><span class="hljs-keyword">elseif</span></span><span> (</span><span><span class="hljs-variable">$result</span></span><span> &gt; </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">$version1</span></span></span><span> is greater than </span><span><span class="hljs-subst">$version2</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">$version1</span></span></span><span> is equal to </span><span><span class="hljs-subst">$version2</span></span><span>\n";
}
</span></span>

Résultat de sortie:

 <span><span><span class="hljs-number">1.10</span></span><span><span class="hljs-number">.2</span></span><span> </span><span><span class="hljs-keyword">is</span></span><span> greater than </span><span><span class="hljs-number">1.9</span></span><span><span class="hljs-number">.9</span></span><span>
</span></span>

Grâce à StrnatCMP , nous pouvons comparer avec précision les numéros de version, en évitant l'erreur des méthodes traditionnelles de comparaison des chaînes.

4. Scénarios d'application de strnatcmp

  • Vérification de l'entrée de l'utilisateur : Lors du traitement des chaînes entrées par les utilisateurs, le tri ou la comparaison du contenu de la chaîne peut être impliqué. StrnatCMP peut vous aider à trier les chaînes raisonnablement en fonction de la taille des nombres et d'améliorer l'expérience utilisateur.

  • Tri de nom de fichier : strnatcmp est un outil très efficace lorsque vous devez trier un ensemble de noms de fichiers, surtout si le nom de fichier contient des nombres.

  • Gestion du numéro de version : pour les systèmes qui doivent gérer les numéros de version logicielle ou d'autres données similaires, StrnatCMP peut garantir que la comparaison des numéros de version est basée sur la taille des nombres plutôt que sur l'ordre des caractères, obtenant ainsi des résultats de comparaison précis.

5. Résumé

La fonction StrnatCMP offre la possibilité de trier les chaînes naturellement et est particulièrement adapté à la gestion des chaînes contenant des nombres. Il est plus conforme aux règles de tri naturelles humaines que les fonctions de comparaison de chaînes ordinaires. Grâce à l'introduction de cet article, vous pouvez voir les avantages de StrnatCMP dans les applications pratiques, en particulier en termes de saisie des utilisateurs, de nom de fichier et de comparaison du numéro de version.