Недавно в своем проекте столкнулся с необходимость сортировать строки в UTF-кодировке в PHP.
Как известно дефолтные функции сортировки в PHP работают в однобайтовой кодировке, и строки в UTF сортируются совсем не так, как хотелось бы, ибо, как известно, в кодировке UTF в обозначении некоторых символов участвует более 1 байта.
Пришлось, как обычно в таких ситуациях, погуглить в поисках братьев по разуму, которые тоже сталкивались с подобными задачами. Решение нашлось довольно быстро.
В поиске хабра упоминания о подобной проблеме мне найти не удалось, поэтому спешу поделиться найденным решением с хабражителями, т.к. такие вещи нужно однозначно складывать в копилку.
Решение выглядит весьма лаконично:
setlocale(LC_COLLATE, 'ru_RU.utf8');
uasort($array, 'strcoll');
uasort — Сортирует массив, используя пользовательскую функцию для сравнения элементов с сохранением ключей, причем вторым параметром принимает имя коллбек функции, посредством которой как раз таки и осуществляется сортировка — http://php.net/manual/ru/function.uasort.php
strcoll — Сравнение строк с учетом текущей локали — php.net/manual/ru/function.strcoll.php
А как Вы сортируете UTF-строки в Ваших PHP-проектах?
Автор: iCoderXXI