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