开发者

sort array with special characters in php

I have an array I'm trying to asort using php. The problem is that the array has accented characters in it and needs to be sorted using "french" rules.

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

I've tried many things, like using php collators, but I get the following error :

PHP Fatal error:  Class 'Collator' not found

I've also tried to set locale but it didn't do anything so I'm not s开发者_如何学Goure I was doing it right, or if I need to isntall the locale. I'm a little confused.

I'm using PHP 5.2.4 if that helps. If I use asort without anything, it puts all the words with accented characters at the end.

Thanks.


I ended up installing the French language pack to my server and using the following :

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

Works for my needs...


The Collator class is part of PHP's internationalization extension, which comes standard with PHP 5.3

Since you have 5.2.4 you'll need to install this extension in order to make use of its classes.


for those who are in Brasil:

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

Pratical Example:

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'>"; 
                            }

by Luy Angelino

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜