2010-05-24 6 views
3

J'ai un tableau que j'essaye d'appeler en utilisant php. Le problème est que le tableau a des caractères accentués et doit être trié en utilisant les règles "french".trier le tableau avec des caractères spéciaux dans php

cote < côte < coté < côté 

J'ai essayé beaucoup de choses, comme l'utilisation des assembleurs php, mais je reçois l'erreur suivante:

PHP Fatal error: Class 'Collator' not found 

J'ai aussi essayé de mettre locale, mais il n'a rien fait pour que je Je ne suis pas sûr que je le faisais bien, ou si j'ai besoin de tous les paramètres régionaux. Je suis un peu confus. J'utilise PHP 5.2.4 si cela peut aider. Si j'utilise un arbre sans rien, il met tous les mots avec des caractères accentués à la fin.

Merci.

+0

Je ne qualifierais pas cela comme une réponse, mais il est utile de vérifier: http://www.brainbell.com/tutorials/ php/Sorting_With_Foreign_Languages.htm –

+1

'cote nickf

+0

@Anthony, je vais vérifier. @nickf Haha. Fondamentalement, une lettre accentuée est entre la lettre non accentuée et la suivante. a <à Enkay

Répondre

11

Je fini d'installer le pack de langue française à mon serveur et en utilisant les éléments suivants:

setlocale(LC_COLLATE, 'fr_CA.utf8'); 
asort($array, SORT_LOCALE_STRING); 

Works pour mes besoins ...

+1

Juste utilisé ceci. Travaillé parfaitement! – jasonaburton

+0

oui! ne connaissait pas le SORT_LOCALE_STRING. merci – ivoba

2

Le Collator class fait partie de internationalization extension PHP, qui est livré en standard avec PHP 5.3

Puisque vous avez 5.2.4 vous devrez install this extension afin d'utiliser ses classes.

+0

Ne serait-il pas mieux de passer à la version 5.3? Aussi, je suis sur Ubuntu. – Enkay

+0

Si la mise à niveau vers 5.3 est une option, alors je dis vraiment "allez-y". Ensuite, vous pouvez commencer à utiliser les nouvelles fonctionnalités de langage cool comme les fermetures et la liaison statique tardive. –

0

pour ceux qui sont au Brésil:

setlocale (LC_ALL, "pt_BR", "ptb");

Exemple Pratique:

function cmp($a, $b) { 
return strcmp($a["first_name"], $b["first_name"]);} $docs = array(
1 => array(
    'first_name' => 'Márcia Amanda', 
    'crm' => 4321, 
    'job' => 'Médica', 
    'sex' => 'f' 
), 
2 => array(
    'first_name' => 'Pedro Alexandre', 
    'crm' => 6789, 
    'job' => 'Veterinário', 
    'sex' => 'm' 
), 
3 => array(
    'first_name' => 'Lívia Pereira', 
    'crm' => 8765, 
    'job' => 'Obstetra', 
    'sex' => 'f' 
)); usort($docs, "cmp", SORT_LOCALE_STRING); 

          $qtas_pessoas = count($docs); 

          $j=1; 

          while (list($key, $value) = each($docs)) { 

          if ($j==1) echo "<div class='wrapper indent-bottom7-1'>"; 

          $dr=''; 
          if ($value["sex"]=='m') $dr='Dr.'; 
          else $dr='Dra.'; 

          echo " 
          <div class='grid_4 alpha'> 
           <h6 class='p2'>$dr ".$value["first_name"]."<br/>CRM ".$value["crm"]."</h6> 
           ".$value["job"]." 
          </div>\n 
          "; 
          $j++; 
          if ($j>$qtas_pessoas) { 
           echo "</div>"; 
           break; // TEMOS APENAS X PESSOAS... 
          } 
          // quebrar sempre de 3 em 3 
          if ($j % 3 == 1) echo "</div><div class='wrapper indent-bottom7-1'>"; 
          } 

par Angelino Luy