Pendant la programmation, en particulier lorsqu'il s'agit de chaînes contenant des nombres et des lettres mixtes, le tri peut devenir moins intuitif. Les méthodes traditionnelles de tri des cordes comparent les nombres dans l'ordre des caractères, ce qui signifie que "2" sera classé avant "10" et ce n'est pas le résultat que nous attendons généralement. Afin d'être plus conforme à la façon dont les humains trient naturellement, PHP fournit une fonction StrnatcasecMP , qui peut trier en fonction de la taille des nombres et de l'ordre des lettres, résolvant ainsi le problème du tri lorsque les nombres et les lettres sont mélangés.
StrnatcasecMP est une fonction intégrée en PHP qui compare deux chaînes, ignore le cas et les trie par ordre naturel. Contrairement aux fonctions de comparaison de chaînes régulières telles que StrCMP ou StrcasecMP , StrnatcasecMP prend en compte les parties numériques de la chaîne et trie par la taille réelle des nombres, plutôt que par la valeur ASCII des caractères.
strnatcasecmp ( string $str1 , string $str2 ) : int
$ str1 : la première chaîne
$ str2 : la deuxième chaîne
Si $ STR1 est égal à $ STR2 , retournez 0 .
Si $ str1 est inférieur à $ STR2 , une valeur négative est retournée.
Si $ STR1 est supérieur à $ STR2 , une valeur positive est retournée.
Nous rencontrons généralement les scénarios suivants où le tri naturel est très important:
Tri de nom de fichier : par exemple, les noms de fichiers sont file1.txt , file2.txt , file10.txt . Si le tri de chaîne traditionnel est utilisé, File10.txt sera classé avant File2.txt . Après avoir utilisé StrnatcasecMP , File10.txt sera correctement classé après File2.txt .
Tri du numéro de produit : numéros de produit tels que prod100 , prod11 et prod2 . Si le tri des chaînes est effectué, ProD100 sera classé avant Prod11 . Mais lorsqu'ils sont triés à l'aide de strnatcasecmp , ils sont disposés dans l'ordre que nous attendons naturellement.
$files = ["file1.txt", "file12.txt", "file2.txt", "file10.txt"];
usort($files, 'strnatcasecmp');
print_r($files);
Résultat de sortie:
Array
(
[0] => file1.txt
[1] => file2.txt
[2] => file10.txt
[3] => file12.txt
)
Comme indiqué ci-dessus, StrnatcasecMP trie les noms de fichiers par taille numérique, plutôt que dans l'ordre des caractères.
$strings = ["abc10", "abc2", "abc1", "abc22"];
usort($strings, 'strnatcasecmp');
print_r($strings);
Résultat de sortie:
Array
(
[0] => abc1
[1] => abc2
[2] => abc10
[3] => abc22
)
Dans cet exemple, les parties numériques de la chaîne sont correctement identifiées et triées, pas seulement par lettres.
Supposons que nous ayons un tableau contenant des URL que nous pouvons trier naturellement à l'aide de strnatcasecMP . Par exemple:
$urls = [
"https://gitbox.net/file10.txt",
"https://gitbox.net/file2.txt",
"https://gitbox.net/file1.txt",
"https://gitbox.net/file12.txt"
];
usort($urls, 'strnatcasecmp');
print_r($urls);
Résultat de sortie:
Array
(
[0] => https://gitbox.net/file1.txt
[1] => https://gitbox.net/file2.txt
[2] => https://gitbox.net/file10.txt
[3] => https://gitbox.net/file12.txt
)
Dans cet exemple, les pièces de nom de fichier de l'URL (telles que file1.txt , file2.txt ) sont organisées par ordre naturel.
StrnatcasecMP est une fonction très utile en PHP, particulièrement adapté à la manipulation des chaînes contenant des nombres et des lettres mixtes. Grâce à cette fonction, nous pouvons trier plus naturellement, en évitant les comportements inattendus dans les méthodes traditionnelles de tri des chaînes. Qu'il s'agisse du tri du nom de fichier, du tri des numéros de produit ou du tri d'URL, StrnatcasecMP peut facilement résoudre le problème des nombres et des lettres mixtes, en veillant à ce que les résultats de tri soient intuitifs.
En utilisant rationnellement strnatcasecmp , vous pourrez améliorer la lisibilité et l'expérience utilisateur du code, ce qui rend le programme plus conforme à la logique de tri conventionnelle lors du traitement du contenu mixte.