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 :

Tri et accents


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 144
    Par défaut Tri et accents
    Bonjour !

    Petite question...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $array[] = 'zoo';
    $array[] = 'école';
    $array[] = 'automobile';
     
    sort($array);
    Donnera automobile, zoo, école... Et non, automobile, école, zoo...

    La fonction sort ne tient pas compte des accents... Comment faire pour que ça soit le cas ?

    Merci, bon weekend,
    Evocatii

  2. #2
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    J'ai la flemme de tester, mais que donne natsort ?

    http://fr.php.net/manual/fr/function.natsort.php

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 144
    Par défaut
    Pareil, ne fonctionne pas.

  4. #4
    Membre Expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230

  5. #5
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Ca ne marche pas chez moi.

    Résultat :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    array(3) {
      [1]=>
      string(6) "école"
      [2]=>
      string(10) "automobile"
      [0]=>
      string(3) "zoo"
    }

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Pour continuer dans la série "je-sais-pas-vraiment-mais-essaye-toujours" : utilises le paramètre optionnel de sort.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sort($array, SORT_LOCALE_STRING);
    SORT_LOCALE_STRING : compare les éléments en utilisant la configuration locale. Ajouté en PHP 5.0.2 et 4.4.0. Avant PHP 6, il utilise les locales système, qui peuvent être modifiées en utilisant la fonction setlocale(). Depuis PHP 6, vous devez utiliser la fonction i18n_loc_set_default().
    Je suis sûre de rien, mais bon...
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre Expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 59
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Billets dans le blog
    8
    Par défaut
    Je peux me tromper puisque j'ai fait une simple recherche sur le net... Mais il semble qu'il n'y ait pas d'autre moyen que de passer ta chaîne à la moulinette qui supprime les accents avant le sort...

    J'ai trouvé cette fonction sur un site généralement assez fiable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php
    function sansaccent($chaine)
    {
       return strtr($chaine,
          'àâäåãáÂÄÀÅÃÁæÆçÇéèêëÉÊËÈïîìíÏÎÌÍñÑöôóòõÓÔÖÒÕùûüúÜÛÙÚÿ',
          'aaaaaaaaaaaaaacceeeeeeeeiiiiiiiinnoooooooooouuuuuuuuy');
    }
    ?>
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2007
    Messages : 144
    Par défaut
    Bonjour,

    Merci à tous pour votre aide...

    D'après mes recherches, il faudra attendre PHP6 pour gérer ce cas de figure nativement par PHP (support unicode).

    En attendant, j'ai réécrit une classe PHP qui gère diverses fonctions dans un environement de travail configuré pour UTF-8.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    class Php {
     
      public static function asort(array &$tableau) {
     
        $tableauSansAccent = self::tableauSansAccent($tableau);
     
        asort($tableauSansAccent);
     
        $tableauTrié = self::tableauTrié($tableau, $tableauSansAccent);
     
        $tableau = $tableauTrié;
     
      }
     
      public static function sort(array &$tableau) {
     
        $tableauSansAccent = self::tableauSansAccent($tableau);
     
        sort($tableauSansAccent);
     
        $tableauTrié = self::tableauTrié($tableau, $tableauSansAccent);
     
        $tableau = $tableauTrié;
     
      }
     
      public static function strtolower($texte) {
        return mb_strtolower($texte, 'utf-8');
      }
     
      public static function strtoupper($texte) {
        return mb_strtoupper($texte, 'utf-8');
      }
     
      public static function ucfirst($texte) {
     
        $texte[0] = self::strtoupper($texte[0]);
        return $texte;
     
      }
     
      private static function tableauSansAccent(array $tableau) {
     
        foreach ($tableau as $cléOuIndex => $texte) {
          $tableauSansAccent[$cléOuIndex] = Texte::sansAccent($texte);
        }
     
        return $tableauSansAccent;
     
      }
     
      private static function tableauTrié(array $tableau, array $tableauSansAccent) {
     
        foreach ($tableauSansAccent as $cléOuIndex => $texteSansAccent) {
     
          foreach ($tableau as $texte) {
     
            if ($texteSansAccent == Texte::sansAccent($texte)) {
     
              $tableauTrié[$cléOuIndex] = $texte;
     
            }
     
          }
     
        }
     
        return $tableauTrié;
     
      }
     
    }
     
    class Texte {
     
      public static function sansAccent($texte) {
     
        return utf8_encode(strtr(utf8_decode($texteSimple), utf8_decode('àáâãäåçèéêëìíîïñòóôõöøùúûüÿÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖØÙÚÛÜ'), utf8_decode('aaaaaaceeeeiiiinoooooouuuuyAAAAAACEEEEIIIINOOOOOOUUUU')));
     
      }
     
    }
    Utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $array[] = 'zoo';
    $array[] = 'école';
    $array[] = 'automobile';
     
    Php::sort($array);
     
    var_dump($array);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    array(3) {
      [0]=>
      string(10) "automobile"
      [1]=>
      string(6) "école"
      [2]=>
      string(3) "zoo"
    }

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

Discussions similaires

  1. [Tableaux] Tri d'un tableau avec des accents
    Par legide dans le forum Langage
    Réponses: 3
    Dernier message: 09/07/2009, 11h36
  2. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  3. Mauvais tri des String avec des accents
    Par lbreuillard dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 23/09/2005, 12h21
  4. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25
  5. [] Tri d'un tableau par ordre alphabétique
    Par cafeine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/09/2002, 08h43

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