Универсальная функция сортировки для PHP без языковых проблем - PullRequest
0 голосов
/ 12 января 2010

Я задал очень похожий вопрос некоторое время назад, и мне было интересно, стало ли немного проще упростить правильную сортировку массива с символами UTF-8 с новыми улучшениями PHP 5.3 +.

Решение, представленное в моем предыдущем вопросе, работает, но я ищу универсальное решение; тот, который не зависит от указанного языкового стандарта - вид того, что MySQL делает с сопоставлением UTF-8 .

Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 12 января 2010

Короткий ответ: вам нужно знать о локали.

Не путайте кодировку с правилами сортировки локали. UTF-8 - это просто способ кодирования символов Unicode: он ничего не говорит о том, как вы обрабатываете сортировку, использование заглавных букв и т. Д.

Я приведу простой пример. Испанский язык имеет два сопоставления: традиционное (где «ch» считается буквой) и современное (где «ch» - две буквы). В традиционной сортировке вы сортируете так:

  1. Барро
  2. Cuenco
  3. Китай
  4. Dado

В современном сопоставлении вы бы отсортировали это так:

  1. Барро
  2. Китай
  3. Cuenco
  4. Dado

Это то же самое в UTF-8, Latin1, Latin9, cp850 или где-либо еще: кодировка не имеет значения.

1 голос
/ 31 марта 2010

Проблема с языками в PHP заключается в том, что они не являются потокобезопасными. Если вы запускаете Apache в многопоточном режиме, вы практически не можете использовать setlocale, поскольку он влияет на все потоки.

Теперь я только что нашел решение, похожее на решение: класс Collator в расширении Intl . У него есть методы для сравнения и сортировки строк. Документы здесь: http://php.net/manual/en/class.collator.php

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