Position actuelle: Accueil> Derniers articles> La différence de comportement de Strcoll dans différents paramètres de paramètres régionaux

La différence de comportement de Strcoll dans différents paramètres de paramètres régionaux

gitbox 2025-05-30

Lors du développement d'applications multilingues, nous impliquons souvent des problèmes de comparaison des chaînes. PHP fournit plusieurs façons de comparer les chaînes, et la fonction Strcoll () est particulièrement intéressante car elle détermine le résultat de la comparaison basée sur les paramètres régionaux actuels. Cet article explorera les différences de performances de Strcoll () sous différents paramètres de paramètres régionaux et l'illustrera à travers des exemples de code spécifiques.

1. Qu'est-ce que Strcoll () ?

Strcoll () est une fonction intégrée en PHP qui compare deux chaînes basées sur les paramètres des paramètres régionaux. Il renvoie un résultat similaire à strcmp () :

  • Renvoie 0 pour indiquer que les deux chaînes sont égales dans les paramètres régionaux actuels;

  • Retour moins de 0 signifie que la première chaîne est classée avant la seconde du tri;

  • Renvoie plus de 0 pour indiquer que la première chaîne est après la seconde du tri.

Contrairement à StrcMP () , Strcoll () considérera les règles des paramètres régionaux, tels que la méthode de tri des caractères, la sensibilité aux cas et le traitement de certains caractères spéciaux.

2. Comment régler les paramètres

Dans PHP, vous pouvez utiliser la fonction setLocale () pour définir le paramètre régional actuel. Par exemple:

 setlocale(LC_COLLATE, 'en_US.UTF-8');

LC_COLLATE est une catégorie spécifiquement utilisée pour influencer la comparaison et le tri des chaînes. D'autres catégories telles que LC_time , LC_Monetary , etc. Affect le temps, la monnaie et d'autres formats.

3. Différences comparatives dans différents contextes régionaux

Prenons les deux paramètres locaux, allemands et anglais comme exemples, et jetons un œil aux différences de performance de Strcoll () .

 setlocale(LC_COLLATE, 'en_US.UTF-8');
echo strcoll("z", "?"); // Résultat de sortie A

setlocale(LC_COLLATE, 'de_DE.UTF-8');
echo strcoll("z", "?"); // Résultat de sortie B

En anglais, "Z" est avant "?", Tandis qu'en allemand, puisque "?" est considéré comme une lettre phonique, elle peut être après "z" ou même près de "a". Par conséquent, les résultats de sortie A et B peuvent être différents.

4. Cas réel: tri multilingue

Supposons que nous ayons un ensemble de noms avec des accents que nous voulons trier selon les préférences linguistiques de l'utilisateur. Le code est le suivant:

 $names = ["Zoe", "?nne", "Anna", "émile"];

setlocale(LC_COLLATE, 'en_US.UTF-8');
usort($names, function($a, $b) {
    return strcoll($a, $b);
});
print_r($names);

Sous EN_US.UTF-8 , le type peut être:

 Array
(
    [0] => Anna
    [1] => émile
    [2] => Zoe
    [3] => ?nne
)

Si vous êtes remplacé par de_de.utf-8 :

 setlocale(LC_COLLATE, 'de_DE.UTF-8');

Ensuite, vous pouvez obtenir:

 Array
(
    [0] => Anna
    [1] => ?nne
    [2] => émile
    [3] => Zoe
)

5. Comment obtenir les paramètres régionaux disponibles?

Dans certains systèmes, le lieu disponible peut être limité. Vous pouvez le visualiser en exécutant la commande suivante sur la ligne de commande:

 locale -a

Ou, essayez de définir les paramètres régionaux dans PHP et utilisez la valeur de retour de setLocale () pour déterminer si elle réussit.

Vi. Suggestions de développement

  1. Vérifiez toujours la valeur de retour de setLocale () pour vous assurer que les paramètres régionaux sont correctement définis;

  2. Si vous devez trier le langage d'entrée de l'utilisateur avec sensibilité, assurez-vous d'utiliser strcoll () au lieu de strcmp () ;

  3. Pour la cohérence multiplateforme, il est recommandé de spécifier clairement les paramètres régionaux requis dans l'application et de s'assurer que ces paramètres sont pris en charge dans la configuration du serveur;

  4. Si les résultats de tri de Strcoll () sont utilisés pour l'affichage frontal (tels que la liste de contacts, le nom du pays, etc.), veuillez simuler différents lieux dans le test pour vous assurer que la logique de tri répond aux attentes.

7. Démonstration en ligne et débogage

Vous pouvez essayer l'effet de tri des différents lieux en utilisant l'adresse suivante:

 https://gitbox.net/locale-strcoll-demo.php

La page prend en charge la sélection de différents localités et la saisie de paires de chaînes pour les comparer, afin que vous puissiez comprendre intuitivement les performances de Strcoll () dans différents locaux.

Conclusion

Strcoll () est une fonction très utile mais souvent négligée. En définissant raisonnablement les paramètres régionaux, il peut nous aider à implémenter une logique de comparaison de chaînes qui est plus conforme aux habitudes du langage utilisateur. Faites bon usage de Strcoll () dans des projets multilingues peut améliorer considérablement l'expérience utilisateur.