En PHP, la comparaison des chaînes est une opération très courante. Habituellement, nous utilisons les fonctions strcmp () ou strcascMP () pour comparer la taille et l'égalité de deux chaînes, mais les deux fonctions sont comparées de caractère par caractère selon la valeur ASCII de la lettre, tandis que la fonction strnatcasecmp () est comparée de manière "naturel", tout en ignorant le cas.
Cet article expliquera en détail comment utiliser la fonction strnatcasecmp () de PHP pour ignorer la comparaison des cas de deux chaînes et expliquer comment elle diffère des autres fonctions de comparaison.
StrnatCasecMP () est une fonction intégrée dans PHP. C'est le nom complet "String Natural Case-insensible Comparon". Il compare deux cordes en fonction de "l'ordre naturel" et ignore les caractéristiques supérieures et inférieures.
Le soi-disant «tri naturel» signifie que les pièces numériques seront comparées en tant que nombres, plutôt que simplement la comparaison caractéristique par caractère. Par exemple, la chaîne "file10.txt" sera considérée comme supérieure à "file2.txt" car le nombre 10 est supérieur à 2, non parce que le caractère "1" est supérieur à 2.
int strnatcasecmp ( string $str1 , string $str2 )
$ STR1 et $ STR2 : deux chaînes à comparer.
Valeur de retour:
Si $ STR1 est inférieur à $ STR2 , un nombre négatif est retourné.
Si les deux chaînes sont égales, retournez 0.
Si $ STR1 est supérieur à $ STR2 , un nombre positif est retourné.
<?php
$str1 = "File10.txt";
$str2 = "file2.txt";
$result = strnatcasecmp($str1, $str2);
if ($result < 0) {
echo "'$str1' Moins que '$str2'";
} elseif ($result > 0) {
echo "'$str1' Supérieur à '$str2'";
} else {
echo "'$str1' et '$str2' égal";
}
?>
Sortir:
'File10.txt' Supérieur à 'file2.txt'
Ici, bien que la partie numérique de la première chaîne soit "10" et que la seconde soit "2", strnatcasecmp () reconnaît correctement la taille du nombre et ignore le cas.
Nom de la fonction | Que ce soit sensible à la casse | Que ce soit à trier naturellement | illustrer |
---|---|---|---|
strcmp () | Oui | Non | Cadre sensible, comparaison de caractères |
strCasecmp () | Non | Non | Comparaison insensible à la cas, caractéristique |
strnatcmp () | Oui | Oui | Tri sensible et naturel de la casse |
strnatcasecmpmp () | Non | Oui | Insensible au cas, tri naturel |
Supposons que vous souhaitiez comparer les parties de chemin des deux URL en fonction du nom de fichier et ignorer la relation de cas et de taille numérique, vous pouvez utiliser strnatcasecmp () pour y parvenir.
<?php
$url1 = "https://gitbox.net/files/File10.txt";
$url2 = "https://gitbox.net/files/file2.txt";
// Analyse URL,Prendre la part du chemin
$path1 = parse_url($url1, PHP_URL_PATH);
$path2 = parse_url($url2, PHP_URL_PATH);
// utiliser strnatcasecmp Comparez les chemins
if (strnatcasecmp($path1, $path2) < 0) {
echo "$path1 Moins que $path2";
} elseif (strnatcasecmp($path1, $path2) > 0) {
echo "$path1 Supérieur à $path2";
} else {
echo "$path1 et $path2 égal";
}
?>
Sortir:
/files/File10.txt Supérieur à /files/file2.txt
Ceci est très pratique lorsque vous traitez des chaînes avec des nombres, tels que les noms de fichiers, les numéros de version, etc.