Dans de nombreux scénarios, nous devons trier par fichier. Des méthodes de tri courantes telles que le tri du dictionnaire peuvent conduire à des résultats inattendus. Par exemple, tri par dictionnaire, File2.txt sera classé avant file10.txt car "2" est plus petit que "1". Cependant, les utilisateurs souhaitent généralement que les noms de fichiers soient triés par ordre numérique, c'est-à-dire que File2.txt doit être placé après fichier10.txt , qui est appelé "tri naturel".
La fonction StrnatcasecMP dans PHP est conçue pour répondre à cette exigence. Il peut comparer deux chaînes et les trier selon les règles de tri naturelles. StrnatcasecMP est une méthode de tri naturelle "insensible à la casse" qui convient très pour le tri du nom de fichier.
Le tri naturel est basé sur le tri intuitif humain. Par exemple, dans le cas des noms de fichiers File1 , File2 , File10 , le résultat du tri dans la nature doit être:
file1
file2
file10
Au lieu de résultats de tri du dictionnaire:
file1
file10
file2
StrnatcasecMP est une fonction très utile en PHP qui compare deux chaînes et les compare selon les règles de tri naturelles. La syntaxe de cette fonction est la suivante:
int strnatcasecmp ( string $string1 , string $string2 )
$ string1 et $ string2 sont deux chaînes à comparer.
Valeur de retour de fonction:
Si $ string1 est inférieur à $ string2 , un entier négatif est retourné.
Si $ string1 est égal à $ string2 , retournez 0.
Si $ string1 est supérieur à $ string2 , un entier positif est retourné.
Grâce à cette fonction, nous pouvons facilement implémenter le tri naturel des noms de fichiers. Voici un exemple qui montre comment trier les noms de fichiers à l'aide de strnatcasecmp .
Supposons que nous ayons le nom de fichier suivant:
$files = ['file10.txt', 'file2.txt', 'file1.txt', 'file20.txt', 'file11.txt'];
Nous voulons trier ces noms de fichiers naturellement afin que les noms de fichiers soient organisés par ordre numérique. Nous pouvons utiliser StrnatcasecMP pour réaliser:
<?php
$files = ['file10.txt', 'file2.txt', 'file1.txt', 'file20.txt', 'file11.txt'];
// utiliser usort et strnatcasecmp Faire le tri naturel
usort($files, 'strnatcasecmp');
// Sortie le nom du fichier trié
print_r($files);
?>
Nous définissons un tableau de fichiers de noms de fichiers $ .
Utilisez la fonction USORT pour trier le tableau, qui accepte un tableau et une fonction de rappel comme paramètres. Ici, nous passons StrnatcasecMP en tant que fonction de rappel dans USORT .
Une fois le tri terminé, les noms de fichiers du tableau des fichiers $ seront organisés en fonction des règles du tri naturel.
Array
(
[0] => file1.txt
[1] => file2.txt
[2] => file10.txt
[3] => file11.txt
[4] => file20.txt
)
Comme vous pouvez le voir, les noms de fichiers sont déjà triés dans l'ordre des numéros. De cette façon, File2.txt est classé avant File10.txt .
StrnatCMP et strnatcasecMP sont tous deux des fonctions utilisées en PHP pour le tri naturel. La différence entre les deux est:
Strnatcmp est sensible à la casse;
StrnatcasecMP est insensible à la casse.
Si vous souhaitez ignorer les différences de cas dans les noms de fichiers, vous pouvez utiliser StrnatcasecMP . Sinon, vous pouvez choisir d'utiliser StrnatCMP .
Lors du tri à l'aide de fonctions de comparaison de chaînes ordinaires telles que STRCMP , vous pouvez rencontrer des problèmes comme "file2.txt" et "file10.txt", et les résultats ne seront pas organisés en ordre numérique intuitif. StrnatcasecMP peut s'assurer que les chaînes sont comparées dans l'ordre numérique, ce qui est plus conforme aux attentes des utilisateurs, en particulier en ce qui concerne les noms de fichiers, les numéros de version, etc. qui nécessitent un tri naturel.