сортировать массив со специальными символами в php - PullRequest
3 голосов
/ 24 мая 2010

У меня есть массив, который я пытаюсь отсортировать с помощью php. Проблема в том, что в массиве есть акцентированные символы, и его нужно отсортировать по «французским» правилам.

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

Я пробовал много вещей, таких как использование php-коллаторов, но я получаю следующую ошибку:

PHP Fatal error:  Class 'Collator' not found

Я также пытался установить языковой стандарт, но он ничего не делал, поэтому я не уверен, что все делал правильно, или мне нужно указать все языковые стандарты Я немного растерялся.

Я использую PHP 5.2.4, если это поможет. Если я использую asort без чего-либо, он ставит все слова с акцентированными символами в конце.

Спасибо.

Ответы [ 3 ]

11 голосов
/ 24 мая 2010

В итоге я установил пакет французского языка на свой сервер и использовал следующее:

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

Работает для моих нужд ...

2 голосов
/ 24 мая 2010

Класс Collator является частью интернационализированного расширения PHP *1004*, которое входит в стандартную комплектацию PHP 5.3

Поскольку у вас есть 5.2.4, вам нужно установите это расширение , чтобы использовать его классы.

0 голосов
/ 20 августа 2015

для тех, кто находится в Бразилии:

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

Практический пример:

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

от Luy Angelino

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...