Lorsque nous travaillons avec des noms de fichiers, nous rencontrons parfois des scénarios où nous devons trier l'alphanumérique naturellement. Souvent, le tri des résultats peut avoir des problèmes. Par exemple, par ordre alphabétique, "file10.txt" peut être en avance sur "file2.txt" car le tri de chaîne est basé sur l'ordre des caractères littéraux. Afin d'atteindre le tri naturel, c'est-à-dire que les chiffres trient par taille réelle, nous pouvons utiliser la fonction StrnatcasecMP de PHP. Cet article expliquera en détail comment utiliser cette fonction pour implémenter le tri naturel alphanumérique des noms de fichiers.
StrnatcasecMP est une fonction intégrée en PHP pour effectuer un tri naturel alphanumérique insensible à la caisse (également appelé "ordre naturel"). Contrairement aux fonctions de comparaison traditionnelles de chaîne, StrnatcasecMP compare les parties numériques par leur taille numérique plutôt que par des valeurs ASCII caractéristiques.
strnatcasecmp(string $string1, string $string2): int
$ string1 : la première chaîne à comparer.
$ string2 : la deuxième chaîne à comparer.
Cette fonction renvoie les valeurs suivantes:
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é.
Supposons que nous ayons un tableau contenant des noms de fichiers, nous pouvons utiliser StrnatcasecMP pour trier les noms de fichiers. Les étapes spécifiques sont les suivantes:
Obtient un tableau de noms de fichiers.
Utilisez la fonction USORT pour combiner strnatcasecmp pour trier le tableau de nom de fichier.
<?php
// Tableau de nom de fichier
$files = [
"file1.txt",
"file10.txt",
"file2.txt",
"file12.txt",
"file11.txt",
];
// utiliser strnatcasecmp Faire le tri naturel
usort($files, function($a, $b) {
return strnatcasecmp($a, $b);
});
// Sortir le nom de fichier trié
foreach ($files as $file) {
echo $file . "\n";
}
?>
Définition du tableau : nous définissons d'abord un tableau de fichiers $ contenant des noms de fichiers qui peuvent causer des problèmes de tri par taille numérique.
Tri naturel : utilisez la fonction USORT pour trier le tableau. USORT nécessite une fonction de rappel pour comparer chaque paire d'éléments du tableau. Nous utilisons StrnatcasecMP dans la fonction de rappel pour le tri naturel.
Noms de fichiers triés de sortie : Après le tri, nous utilisons ForEach to Loop to Output Trié Names pour nous assurer qu'ils sont disposés par ordre naturel.
Par rapport aux autres fonctions de comparaison de chaînes, StrnatcasecMP peut gérer correctement les noms de fichiers contenant des numéros. Il trie les nombres par taille numérique, plutôt que par comparaison de caractères. Cela évite le problème de "File10" classé avant "File2".
Si nous exécutons le code ci-dessus, la sortie sera:
file1.txt
file2.txt
file10.txt
file11.txt
file12.txt
Comme vous pouvez le voir, les noms de fichiers sont triés dans l'ordre alphanumérique naturel.
Dans certains scénarios, nous devrons peut-être obtenir le nom de fichier de l'URL et le trier. Si l'URL contient un nom de fichier, nous pouvons d'abord extraire le nom de fichier en analysant l'URL, puis le trier à l'aide de strnatcasecmp . Par exemple, si l'URL contient un chemin de fichier, nous pouvons utiliser Parse_Url et Basen Name pour obtenir le nom de fichier.
Supposons qu'il y ait l'URL suivante:
<?php
// URL Tableau
$urls = [
"https://gitbox.net/files/file1.txt",
"https://gitbox.net/files/file10.txt",
"https://gitbox.net/files/file2.txt",
];
// Extraire le nom du fichier并Faire le tri naturel
usort($urls, function($a, $b) {
// Extraire le nom du fichier
$fileA = basename(parse_url($a, PHP_URL_PATH));
$fileB = basename(parse_url($b, PHP_URL_PATH));
// utiliser strnatcasecmp Comparez les noms de fichiers
return strnatcasecmp($fileA, $fileB);
});
// Sortie triée URL
foreach ($urls as $url) {
echo $url . "\n";
}
?>
Nous définissons d'abord un tableau URL $ contenant des URL.
Utilisez la fonction PARSE_URL pour extraire la partie Chemin de l'URL, puis utilisez le nom de Basen pour obtenir le nom du fichier.
Utilisez StrnatcasecMP pour trier les noms de fichiers naturellement.
https://gitbox.net/files/file1.txt
https://gitbox.net/files/file2.txt
https://gitbox.net/files/file10.txt
En utilisant la fonction StrnatcasecMP dans PHP, nous pouvons facilement implémenter l'ordre alphanumérique des noms de fichiers, garantissant que les parties numériques des noms de fichiers sont triées par taille numérique. Qu'il s'agisse de tri le tableau de nom de fichier ou d'extraire et de tri les noms de fichiers de l'URL, StrnatcasecMP peut nous aider à obtenir le résultat de tri correct.
J'espère que cet article sera utile pour que vous compreniez l'utilisation de la fonction strnatcasecmp . Si vous avez des questions, n'hésitez pas à poser des questions!