Массив без учета регистра ключей в PHP версии 5.3 или менее
PHP 5.4 представляет полезную SORT_FLAG_CASE для того, чтобы сделать любой другой регистр поиска нечувствительным. К сожалению, это не доступно в PHP 5.3 или меньше, и поэтому мне было интересно, как выглядит следующий массив:
array('a'=>2,'b'=>4,'A'=>1,'B'=>3);
Может быть отсортировано по:
array('A'=>1,'a'=>2,'B'=>3,'b'=>4);
Так как обычная функция ksort()
сортирует ее как:
array('A'=>1,'B'=>3,'a'=>2,'b'=>4);
Ответы
Ответ 1
Комментарий к одной из страниц ссылок на функции PHP указал мне на функцию uksort()
; это (и функция uasort()
для сортировки по значению вместо ключа) позволяют алгоритму сравнения для смещения в быстрой сортировке, который должен быть написан пользователем.
Объедините это с очень простой функцией strcasecmp()
(которая сравнивает две строки и возвращает < 0 для a > b и > 0 для a > b) дает вам:
uksort($array, 'strcasecmp');
Чтобы легко достичь эффекта:
ksort($array,SORT_STRING | SORT_FLAG_CASE);
В PHP 5.3 или менее.
Ответ 2
Вот как я отсортировал (без учета регистра) массив строк utf8 в PHP 7:
uksort($myarray, function ($a, $b) {
$a = mb_strtolower($a);
$b = mb_strtolower($b);
return strcmp($a, $b);
});
Для PHP 5.3 вам необходимо создать свою собственную функцию сортировки:
function mySort1($a, $b) {
$a = mb_strtolower($a);
$b = mb_strtolower($b);
return strcmp($a, $b);
}
uksort($result['rows'], 'mySort1');