Position actuelle: Accueil> Derniers articles> Comment utiliser la fonction StrnatCMP de PHP pour trier les chaînes naturellement? Explication détaillée des méthodes pratiques

Comment utiliser la fonction StrnatCMP de PHP pour trier les chaînes naturellement? Explication détaillée des méthodes pratiques

gitbox 2025-09-16

Comment utiliser la fonction StrnatCMP de PHP pour trier les chaînes naturellement? Explication détaillée des méthodes pratiques

Pendant le développement, nous devons souvent trier un ensemble de chaînes. Les méthodes de tri traditionnelles trient souvent des chaînes dans l'ordre du dictionnaire, et parfois nous voulons que les résultats de tri se conforment à la règle de "tri naturel", c'est-à-dire que les valeurs sont triées par la taille réelle, plutôt que le simple tri dans l'ordre de caractère de la chaîne. PHP fournit une fonction très utile strnatcmp () pour nous aider à mettre en œuvre le tri naturel.

Qu'est-ce que le tri naturel?

Le tri naturel, comme son nom l'indique, fait référence au tri des données en fonction de la compréhension conventionnelle des humains. Par exemple, lors du tri des noms de fichiers, "File10" doit être suivi de "File2" au lieu d'être le premier dans l'ordre du dictionnaire. Les règles traditionnelles de tri du dictionnaire classeront "File10" avant "File2" car "1" est inférieur à "2", tandis que le tri naturel sera trié par taille numérique.

Introduction à la fonction strnatcmp ()

La fonction StrnatCMP () de PHP est une fonction de tri naturelle pour comparer deux chaînes. Il est similaire à strcmp () , mais strnatcmp () gérera les parties numériques d'une chaîne plus intelligemment, permettant des règles de tri de type humain.

Prototype de fonction:

 <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>
  • $ str1 et $ str2 : ces deux paramètres sont deux chaînes qui doivent être comparées.

  • Valeur de retour: si $ str1 est classé avant $ STR2 , il renvoie un entier négatif; Si $ STR1 est égal à $ STR2 , il renvoie 0; Si $ STR1 est classé après $ STR2 , il renvoie un entier positif.

Comment fonctionne strnatcmp ()

Contrairement aux fonctions de comparaison traditionnelles de chaîne, strnatcmp () analyse les parties numériques de la chaîne et les compare sur la taille numérique réelle. Il compare chaque partie de la chaîne un par un jusqu'à ce que le résultat de comparaison soit déterminé.

Par exemple, lors de la comparaison de "File10" et "File2" , Strnatcmp () compare d'abord la pièce "File" , puis continue de comparer le nombre de parties 10 et 2 . Étant donné que 10 est supérieur à 2 , "File10" sera classé derrière "File2" .

Exemple: comment utiliser strnatcmp () pour le tri naturel

Nous pouvons utiliser strnatcmp () pour trier un ensemble de noms de fichiers naturellement, le code est le suivant:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// Tableau de chaînes à tri</span></span><span>
</span><span><span class="hljs-variable">$fileNames</span></span><span> = [</span><span><span class="hljs-string">'file2.txt'</span></span><span>, </span><span><span class="hljs-string">'file10.txt'</span></span><span>, </span><span><span class="hljs-string">'file1.txt'</span></span><span>, </span><span><span class="hljs-string">'file12.txt'</span></span><span>, </span><span><span class="hljs-string">'file11.txt'</span></span><span>];

</span><span><span class="hljs-comment">// utiliserusort()Combinéstrnatcmp()Faire le tri naturel</span></span><span>
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$fileNames</span></span><span>, </span><span><span class="hljs-string">'strnatcmp'</span></span><span>);

</span><span><span class="hljs-comment">// Résultats triés de sortie</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$fileNames</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> . PHP_EOL;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Résultat de sortie:

 <span><span>file1.txt
file2.txt
file10.txt
file11.txt
file12.txt
</span></span>

Dans cet exemple, nous créons d'abord un tableau contenant des noms de fichiers, puis utilisons la fonction USORT () pour trier le tableau naturellement avec strnatcmp () . Les tableaux triés sont conformes à la commande que nous attendons, et les pièces numériques sont organisées en taille.

Autres fonctions connexes

En plus de strnatcmp () , PHP fournit également StrnatcasecMP () , qui est similaire à la fonction strnatcmp () , mais strnatcasecmp () ignore les différences de cas lors de la comparaison.

Exemple:

 <span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// 忽略大小写Faire le tri naturel</span></span><span>
</span><span><span class="hljs-variable">$fileNames</span></span><span> = [</span><span><span class="hljs-string">'File2.txt'</span></span><span>, </span><span><span class="hljs-string">'file10.txt'</span></span><span>, </span><span><span class="hljs-string">'File1.txt'</span></span><span>, </span><span><span class="hljs-string">'file12.txt'</span></span><span>, </span><span><span class="hljs-string">'file11.txt'</span></span><span>];
</span><span><span class="hljs-title function_ invoke__">usort</span></span><span>(</span><span><span class="hljs-variable">$fileNames</span></span><span>, </span><span><span class="hljs-string">'strnatcasecmp'</span></span><span>);

</span><span><span class="hljs-comment">// Résultats triés de sortie</span></span><span>
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$fileNames</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> . PHP_EOL;
}
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>

Résultat de sortie:

 <span><span>File1.txt
File2.txt
file10.txt
file11.txt
file12.txt
</span></span>

en conclusion

En utilisant strnatcmp () et strnatcasecmp (), nous pouvons facilement trier les chaînes contenant naturellement des nombres, garantissant que les résultats de tri sont conformes à l'intuition humaine. Ces fonctions sont très adaptées aux scénarios tels que le tri du nom de fichier, la comparaison du numéro de version, etc. qui nécessitent un tri naturel.

J'espère que cet article peut vous aider à mieux comprendre les fonctions de tri naturelles et leurs applications en PHP.