Подтвердить что ты не робот

Массив без учета регистра ключей в 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);
4b9b3361

Ответ 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');