En PHP, nous devons souvent trier ou comparer les chaînes. Dans le scénario de tri naturel, StrnatcasecMP et Strcoll sont deux fonctions de comparaison de chaînes couramment utilisées. Bien que les deux soient utilisés pour comparer les chaînes, ils sont quelque peu différents dans la façon dont ils sont traités. Aujourd'hui, nous ferons une comparaison détaillée de ces deux fonctions pour vous aider à choisir la bonne fonction pour gérer les besoins du tri des chaînes naturelles.
strnatcasecMP :
StrnatcasecMP est une fonction de PHP qui compare deux chaînes d'une manière "nature naturel". Le soi-disant "tri naturel" signifie que les chiffres d'une chaîne seront traités comme des nombres, pas seulement des caractères. Sa méthode de comparaison ignore le cas, donc dans la comparaison des lettres, le cas n'affecte pas le tri.
grammaire:
int strnatcasecmp ( string $str1 , string $str2 )
Valeur de retour:
Si $ STR1 est inférieur à $ STR2 , un nombre négatif est retourné.
Si $ STR1 est égal à $ STR2 , retournez 0.
Si $ STR1 est supérieur à $ STR2 , un nombre positif est retourné.
Exemple:
$str1 = "file10";
$str2 = "file2";
echo strnatcasecmp($str1, $str2); // Nombre négatif de sortie,parce que "file10" Classement dans l'ordre naturel "file2" Devant
Strcoll :
Strcoll compare deux chaînes en fonction du paramètre de paramètres régionaux actuel. Il utilise des règles localisées pour les comparaisons de chaînes, de sorte que les résultats peuvent varier en fonction de différents lieux. Il convient au tri des scénarios qui doivent prendre en compte les différences linguistiques et culturelles.
grammaire:
int strcoll ( string $str1 , string $str2 )
Valeur de retour:
Si $ STR1 est inférieur à $ STR2 , un nombre négatif est retourné.
Si $ STR1 est égal à $ STR2 , retournez 0.
Si $ STR1 est supérieur à $ STR2 , un nombre positif est retourné.
Exemple:
setlocale(LC_COLLATE, 'en_US.UTF-8'); // Configuration de la zone
$str1 = "apple";
$str2 = "banana";
echo strcoll($str1, $str2); // Nombre négatif de sortie,parce que "apple" Ordre alphabétique "banana" Devant
Trier par :
StrnatcasecMP utilise la méthode du "tri naturel" et les nombres seront traités comme des nombres pour le tri, ignorant la partie supérieure et les minuscules.
Strcoll compare les chaînes basées sur les paramètres des paramètres régionaux du système, et les règles de tri dépendront de différentes langues et habitudes culturelles.
Utilisez des scénarios :
Si vous voulez faire du tri naturel, surtout lorsque vous comparez les chaînes contenant des nombres, StrnatcasecMP est plus approprié. Par exemple, lorsque vous souhaitez comparer les noms de fichiers, des chaînes comme "File1" et "File10" doivent être triées dans l'ordre naturel, alors strnatcasecmp est un meilleur choix.
Si vous devez comparer les chaînes par les paramètres régionaux, en particulier lorsque vous traitez avec un contenu multilingue, Strcoll est une fonction plus appropriée. Par exemple, Strcoll est plus flexible lorsque vous voulez que les cordes soient triées par les paramètres régionaux (comme l'anglais ou le français).
Différences de performance :
StrnatcasecMP peut être légèrement plus lent à traiter lors du tri naturel, car il nécessite des nombres d'analyse dans la chaîne.
Strcoll trie en fonction des paramètres régionaux actuels, de sorte que les performances peuvent être affectées par les paramètres régionaux, mais il est généralement plus efficace.
// utiliser strnatcasecmp Faire le tri naturel
$file1 = "file10";
$file2 = "file2";
echo strnatcasecmp($file1, $file2); // Nombre négatif de sortie,file10 exister file2 Avant
// utiliser strcoll Tri des paramètres des paramètres régionaux
setlocale(LC_COLLATE, 'en_US.UTF-8');
echo strcoll("apple", "banana"); // Nombre négatif de sortie,parce que apple 排exister banana Devant
Lors du tri des chaînes, StrnatcasecMP est un choix plus approprié si vous avez besoin de comparer les chaînes dans "Ordre naturel", surtout si la chaîne contient des nombres. Il peut mieux comprendre les besoins du tri numérique. D'un autre côté, Strcoll convient plus aux scénarios où vous devez trier par la langue des paramètres, surtout lorsque vous devez trier plusieurs langues.
Par conséquent, la fonction à choisir dépend de vos besoins réels. Strcoll pourrait être mieux si vous voulez faire du tri de chaîne transversal; StrnatcasecMP est plus applicable si vous ne vous souciez que du tri naturel, surtout lorsque les chiffres impliquent le tri.