PHP ksort, кажется, не зависит от setlocale - PullRequest
1 голос
/ 01 апреля 2011

Мне дан массив, который нужно отсортировать по его ключу (ассоциативный массив), и в нем могут быть некоторые акцентированные символы (à, è, ì и т. Д.). Если это поможет, я знаю язык, который будет использоваться, поэтому я должен быть в состоянии установить локаль в теории. Итак, моя оригинальная теория заключалась в том, чтобы сделать это так:

setlocale(LC_COLLATE, 'fre');
ksort($array, SORT_LOCALE_STRING);

Похоже, это не меняет способ работы ksort - Символы с ударением всегда располагаются в алфавитном порядке, когда я думаю, что они должны, по крайней мере, идти после обычных символов. Например, «каждый» будет идти после «каждый», но не после «справедливый». Итак, я начал изучать сортировщик, но не смог найти способ сортировки по ключам массива. Если у кого-то есть какие-либо идеи, это будет с благодарностью.

Ответы [ 2 ]

2 голосов
/ 01 апреля 2011

Это на сервере Windows или Linux (или Mac)?Я считаю, что коды локали немного отличаются в Windows ... например, 'nl_NL' в Linux и 'nld_nld' в Windows.

1 голос
/ 17 мая 2018

В Linux вы можете попробовать команду "locale", чтобы узнать вашу локаль.

$ locale

LANG=fr_CA.UTF-8
LANGUAGE=
LC_CTYPE="fr_CA.UTF-8"
LC_NUMERIC=fr_CA.UTF-8
LC_TIME=fr_CA.UTF-8
LC_COLLATE="fr_CA.UTF-8"
LC_MONETARY=fr_CA.UTF-8
LC_MESSAGES="fr_CA.UTF-8"
LC_PAPER=fr_CA.UTF-8
LC_NAME=fr_CA.UTF-8
LC_ADDRESS=fr_CA.UTF-8
LC_TELEPHONE=fr_CA.UTF-8
LC_MEASUREMENT=fr_CA.UTF-8
LC_IDENTIFICATION=fr_CA.UTF-8
LC_ALL=

Тогда

  setlocale(LC_ALL, 'fr_CA.UTF-8');
  ksort($my, SORT_LOCALE_STRING);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...