Dans PHP, strnatcasecmp () est une fonction de comparaison de chaînes, qui peut être comparée dans l'ordre naturel des chaînes. Cela signifie qu'il est non seulement comparé par la valeur ASCII du caractère, mais considère également la relation de taille des nombres. Par conséquent, il est particulièrement utile pour les chaînes contenant des nombres, permettant une façon de trier plus naturel chez l'homme. Cette fonction ignore la différence en cas de tri.
Cependant, lorsque vous traitez des chaînes avec des caractères spéciaux, comment s'assurer que l'exactitude du type est également une préoccupation pour de nombreux développeurs. Dans cet article, nous discuterons de la façon d'utiliser la fonction strnatcasecmp () pour trier les chaînes avec des caractères spéciaux naturellement et assurer que les résultats triés sont comme prévu.
La fonction strnatcasecmp () est utilisée pour comparer les tailles de deux chaînes, trier les cordes dans "ordre naturel" et ignorer le cas des lettres. Contrairement à la fonction STRCMP () traditionnelle, StrCMP () comparera les caractères par caractère, tandis que StrnatCasecmpMP () extraire d'abord les nombres dans la chaîne à comparer. Par conséquent, lors du traitement des chaînes contenant des nombres, ils peuvent les trier dans l'ordre des nombres.
int strnatcasecmp ( string $str1 , string $str2 )
$ str1 : la première chaîne
$ str2 : la deuxième chaîne
Valeur de retour : si $ str1 est inférieur à $ STR2 , renvoyez un nombre négatif; Si $ STR1 est égal à $ STR2 , renvoyez un zéro; Si $ STR1 est supérieur à $ STR2 , renvoyez un nombre positif.
<?php
$str1 = "file2.txt";
$str2 = "file10.txt";
$str3 = "file1.txt";
$arr = [$str1, $str2, $str3];
usort($arr, 'strnatcasecmp');
print_r($arr);
?>
Résultat de sortie:
Array
(
[0] => file1.txt
[1] => file2.txt
[2] => file10.txt
)
Comme le montre l'exemple ci-dessus, la fonction strnatcasecmp () fait trier les nombres dans l'ordre naturel des humains, plutôt que sur la base de la valeur ASCII de la lettre. Ceci est particulièrement utile pour les noms de fichiers ou toute chaîne contenant des numéros.
StranatcasecMP () peut également être géré correctement pour les chaînes contenant des caractères spéciaux (tels que des symboles, des espaces, etc.). Cependant, vous devez être conscient de la position et du type de caractères spéciaux dans la chaîne, en particulier lors du tri des chaînes, ils peuvent affecter le résultat de tri.
<?php
$str1 = "file-2.txt";
$str2 = "file-10.txt";
$str3 = "file-1.txt";
$str4 = "[email protected]";
$arr = [$str1, $str2, $str3, $str4];
usort($arr, 'strnatcasecmp');
print_r($arr);
?>
Résultat de sortie:
Array
(
[0] => [email protected]
[1] => file-1.txt
[2] => file-2.txt
[3] => file-10.txt
)
Dans cet exemple, les caractères spéciaux (tels que @ et - ) affectent l'ordre lors du tri des chaînes. Comme on peut le voir, la chaîne avec @ est devant. PHP détermine l'ordre de ces caractères sur la base des valeurs ASCII lors de la comparaison, vous pouvez donc ajuster la position ou la priorité des caractères spéciaux avec un prétraitement approprié.
Si la chaîne contient une URL et que vous souhaitez remplacer son nom de domaine par un nom de domaine spécifique (par exemple, remplacer tous les noms de domaine de l'URL par gitbox.net ), vous pouvez utiliser des expressions régulières pour gérer cela. Voici un exemple:
<?php
function replaceDomain($url) {
return preg_replace('/https?:\/\/[^\/]+/', 'https://gitbox.net', $url);
}
$str1 = "https://example.com/page1";
$str2 = "https://testsite.org/hello";
$str3 = "https://mywebsite.net/about";
$arr = [$str1, $str2, $str3];
$arr = array_map('replaceDomain', $arr);
// utiliser strnatcasecmp Faire le tri naturel
usort($arr, 'strnatcasecmp');
print_r($arr);
?>
Résultat de sortie:
Array
(
[0] => https://gitbox.net/page1
[1] => https://gitbox.net/hello
[2] => https://gitbox.net/about
)
Dans cet exemple, tous les noms de domaine de l'URL sont remplacés par gitbox.net puis triés à l'aide de strnatcascmpmp () . Les expressions régulières vous permettent d'avoir la flexibilité de traiter et de remplacer toute partie d'une chaîne.
L'utilisation de la fonction strnatcasecmp () rend très pratique de trier les chaînes avec des caractères spéciaux naturellement. Que les chaînes contiennent des nombres, des symboles ou des caractères spéciaux, strnatcasecmp () peut comparer et trier correctement dans l'ordre naturel. Si vous devez remplacer le domaine URL, vous pouvez utiliser une combinaison d'expressions régulières et de fonctions de remplacement de chaîne pour terminer la tâche.
J'espère que cet article vous aide lorsque vous traitez avec un tri de chaînes qui contient des caractères et des URL spéciaux!