сортировка массива специальными символами в php
У меня есть массив, который я пытаюсь отсортировать с помощью php. Проблема в том, что в массиве есть символы с ударением, и его необходимо отсортировать с использованием "французских" правил.
cote < côte < coté < côté
Я пробовал много вещей, например, использовать php-фильтры, но я получаю следующую ошибку:
PHP Fatal error: Class 'Collator' not found
Я также пытался установить локаль, но это ничего не дало, поэтому я не уверен, что делал это правильно, или если мне нужно изменить локаль. Я немного сбит с толку.
Я использую PHP 5.2.4, если это поможет. Если я использую asort без чего-либо, он помещает все слова с акцентированными символами в конце.
Спасибо.
3 answers
В итоге я установил пакет французского языка на свой сервер и использовал следующее:
setlocale(LC_COLLATE, 'fr_CA.utf8');
asort($array, SORT_LOCALE_STRING);
Работает для моих нужд...
Класс Collator является частью расширения интернационализации PHP, которое входит в стандартную комплектацию PHP 5.3
Поскольку у вас есть 5.2.4, вам потребуется установить это расширение , чтобы использовать его классы.
Для тех, кто находится в Бразилии:
Заданный масштаб (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'>";
}
Луи Анджелино