Dans le développement de PHP, la comparaison des cordes est l'une des opérations les plus courantes. Surtout lorsque vous traitez les entrées de l'utilisateur, le tri du nom de fichier ou la mise en œuvre des fonctions de recherche, comment comparer correctement les chaînes avec différents cas supérieurs et inférieurs, en particulier les chaînes contenant des caractères internationaux, est un problème qui ne peut pas être ignoré. La fonction StrnatcasecMP est un outil conçu spécifiquement pour cette comparaison de chaîne insensible à la caisse.
StrnatcasecMP est une fonction intégrée fournie par PHP pour comparer deux chaînes. Sa méthode de comparaison est dans "ordre naturel" et est insensible à la casse. Cela signifie qu'il peut être comparé dans l'ordre, l'homme comprend habituellement, par exemple: par exemple:
echo strnatcasecmp("image1.jpg", "Image10.jpg");
Le code ci-dessus renvoie un nombre négatif, indiquant que l'image1.jpg est inférieur à l'image10.jpg , car "1" est avant "10".
int strnatcasecmp(string $string1, string $string2)
La valeur de retour est un entier:
<0 : String1 est inférieur à String2
= 0 : deux chaînes sont égales
> 0 : String1 est supérieur à String2
Le StrcasecMP standard compare les valeurs ASCII des caractères Lettre par lettre, quelle que soit la signification des nombres dans la chaîne. StrnatcasecMP adopte le "tri naturel", ce qui signifie qu'il traite les nombres dans la chaîne dans son ensemble. Par exemple:
var_dump(strcasecmp("file2.txt", "file10.txt")); // retour > 0
var_dump(strnatcasecmp("file2.txt", "file10.txt")); // retour < 0
Cela rend StrnatcasecMP particulièrement adapté aux comparaisons de chaînes avec les nombres, tels que les noms de fichiers, les numéros de version, etc.
Bien que StrnatcasecMP gère correctement le cas des lettres ASCII, il n'a pas de support "entièrement international" en ce qui concerne les caractères internationaux (tels que les lettres latines avec des notes diacritiques, des caractères non latins, etc.). Autrement dit, pour certains personnages de mulabyte, il peut ne pas se comporter comme prévu.
Par exemple:
echo strnatcasecmp("café", "CAFé");
Cette comparaison peut ne pas considérer deux chaînes égales, selon le codage des caractères sous-jacent et la mise en œuvre interne de PHP.
Si vous avez besoin d'un comportement de tri vraiment international et sensible à la langue, vous pouvez utiliser la classe Collator dans l'extension INTL de PHP:
$collator = new Collator('fr_FR');
echo $collator->compare("café", "CAFé"); // Sortir 0,Indique l'égalité
Collator prend en charge plusieurs langues et lieux, ce qui peut mieux gérer les personnages internationaux.
Supposons que vous souhaitiez trier les noms de fichiers téléchargés dans un site Web, étant donné que les utilisateurs peuvent télécharger des noms de fichiers avec différents cas et peuvent également avoir des nombres, voici un exemple de code utilisant strnatcasecmp :
$files = ["image10.jpg", "Image2.jpg", "image1.JPG", "Image20.jpg"];
usort($files, function($a, $b) {
return strnatcasecmp($a, $b);
});
foreach ($files as $file) {
echo "<a href='https://gitbox.net/uploads/{$file}'>{$file}</a><br>";
}
Le résultat de la sortie est:
image1.JPG
Image2.jpg
image10.jpg
Image20.jpg
On peut voir que les résultats de tri sont conformes aux habitudes naturelles humaines et ignorent le cas des noms de fichiers.
StrnatcasecMP est un outil puissant et pratique pour comparer les chaînes dans "Ordre naturel" sans sensibilité aux cas.
Il convient particulièrement aux chaînes avec des nombres, tels que les noms de fichiers, les étiquettes, les numéros de version, etc.
Pour des comparaisons contenant des caractères internationaux, StrnatcasecMP peut ne pas être idéal et il est recommandé d'utiliser le collator étendu INTL pour le moment.
La maîtrise de l'utilisation de StrnatcasecMP peut vous aider à traiter plus naturellement la logique de l'entrée des utilisateurs, ce qui rend vos applications PHP plus intelligentes et conviviales.