- PVSM.RU - https://www.pvsm.ru -

PHP: Сортировка строк в UTF-кодировке

Недавно в своем проекте столкнулся с необходимость сортировать строки в 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