IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Tableaux] Caractères accentués, tri et internationalisation


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par défaut [Tableaux] Caractères accentués, tri et internationalisation
    Bonjour,

    Je cherche à trier le contenu d'un tableau associatif par ordre alphabétique, en fonction de la localisation (combinaison des fonctions usort et strcoll).
    Mon problème, c'est que "République Tchèque" est toujours placé après "Roumanie", quel que soit les paramètres de localisation.

    Je pourrais faire le tri au moment de ma requête à la base de données, mais ça m'obligerait à reprendre entièrement mes choix de conception, et ça ne me tente pas vraiment. Il doit bien avoir moyen de faire un tri correct en php !

    Je pourrais aussi écrire une fonction de transformation pour éliminer les caractères accentués, je pourrais le faire en français, mais cette appli est à destination de tous les pays d'Europe, dans toutes les langues, et je ne peux pas faire de table de correspondance exhaustive (il y a aussi des accents en grec, et des cédilles en roumain).

    Si quelqu'un a un début de réponse, il sauvera peut-être un cerveau en detresse.

    Merci

    Lulu



    PS : Rien à voir avec le schmilbilick mais y a t'il une version de strcoll insensible à la casse ?

  2. #2
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Par défaut
    Citation Envoyé par lulublu
    Rien à voir avec le schmilbilick mais y a t'il une version de strcoll insensible à la casse ?
    strcoll compare des chaines, si tu fais insensible à la casse, ca compare plus vraiment les chaines ...

    apres si tu veux que TOTO soit pareil que toto, donc que strcoll te retournes 0, tu peux faire un http://ie.php.net/manual/fr/function.strtolower.php sur les deux chaines avant de faire une comparaison.

  3. #3
    Membre Expert

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Par défaut
    Sinon je viens de trouver tout ca :
    http://ie2.php.net/manual/fr/function.strnatcasecmp.php
    http://ie2.php.net/manual/fr/function.natcasesort.php
    http://ie2.php.net/manual/fr/function.natsort.php

    faut voir si cet ordre naturel te conviens.

    Sinon : http://ie2.php.net/manual/fr/function.uasort.php
    et tu définies toi même ta fonction de tri.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par défaut
    Merci,
    J'ai pensé au strtolower() hier, pour ça c'est bon.
    Sinon je viens de faire un test avec strnatcasecmp(), visiblement ça fait pas mal ce que je veux.
    C'est dommage qu'ils ne parlent que de tri de chiffres dans la doc, alors que ça gère les accents aussi !

    Je ne sais pas si le tri obtenu sera cohérent selon les règles de chaque pays, donc je ne marque pas encore le sujet comme résolu, mais on y est presque !

    Merci beaucoup Maxoo

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Mai 2006
    Messages : 15
    Par défaut
    En fait non,

    J'ai mal regardé la première fois, le tri avec strnatcmp() n'est pas mieux que les autres, les accents sont placés en début d'alphabet, contrairement aux autres comparaisons de chaines qui considèrent qu'un accent est à la fin de l'alphabet.

    J'ai bien fait de ne pas clore cette discussion, mais je commence à croire que je ne trouverais pas de meilleure solution que d'écrire moi-même une fonction de tri.

  6. #6
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    petite idée :

    * associer une clé unique a chaque element de ton tableau
    * dupliquer ton tableau
    * sur la copie, remplacer tout les accents par les caracteres non accentués
    * trier la copie
    * realiser le tableau final avec les clés du tableau trié et les valeurs du tableau d'origine (avec un parcours simple du tableau, mais y a peut etre mieux)

    Sinon en effet, tu peux faire une fonction de comparaison personnalisée avec usort, et ce commentaire parait interessant sur la doc officielle.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 04/11/2013, 19h32
  2. [Tableaux] Affichage des caractères accentués
    Par kate59 dans le forum Langage
    Réponses: 2
    Dernier message: 06/02/2008, 20h34
  3. Réponses: 7
    Dernier message: 09/10/2007, 16h47
  4. [PostgreSQL] Les caractères accentués ?
    Par yacomor dans le forum Requêtes
    Réponses: 2
    Dernier message: 18/02/2003, 16h30
  5. insérer des caractères accentués INFORMIX/JDBC
    Par donde dans le forum Informix
    Réponses: 2
    Dernier message: 19/11/2002, 20h02

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo