аватар |

Статьи / PHP /

Как отсортировать массив в алфавитном порядке в PHP?

При работе на многих сайтах часто встречается вопрос сортировки данных массива в алфавитном порядке. Многие для этого пишут дополнительные массивы, сравнивают крупные таблицы и перебирают каждое название... Этот вариант не самый лучший, хотя его мы тоже рассмотрим. В данной статье я бы хотел предложить самый простой и короткий путь, который при внимательном прочтении мануалов можно найти в документации.

Массив в алфавитном порядке PHP


Способ достаточно прост и заключается в двух шагах: установке локали (setlocal) и непосредственно сортировки массива. Рассмотрим пример с комментариями.

Код PHP

<?php
setlocale(LC_ALL, "Russian_Russia.1251"); // установили локаль для русских букв
 
// пример массива, где слова расположены НЕ по порядку
$example=array("банка","Борис","вид","анкета","егерь","Фёдор","жена","голос");  
 
natcasesort($example, SORT_LOCALE_STRING); // сортируем массив БЕЗ учёта регистра
// ДЛЯ УЧЁТА РЕГИСТРА используйте sort вместо natcasesort

// выводим результат
foreach ($example as $key => $value){
echo "$value "; // отобразим только слова, без индекса
}
?>

Демонстрация Скачать исходники

В демонстрации можете посмотреть работу скрипта. При желании можете также скачать архив с файлом.

Если у Вас сервер не на Windows, то нужно будет установить другие локали или сразу несколько:

(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');
// Выведет ru_RU.CP1251 для FreeBSD
// Выведет rus_RUS.CP1251 для линукса
// Выведет Russian_Russia.1251 для Windows

Опережу ответом один из вопросов - локаль для Украины в PHP выглядит так:

Ukrainian_Ukraine.1251 (cp1251) - локаль для Украины

Как установить локаль для других кодировок в PHP?

<?php
// Устновка локалей для Windows

// Кодировка Windows-1251
setlocale(LC_ALL, 'Russian_Russia.1251');

// Кодировка KOI8-R
setlocale(LC_ALL, 'Russian_Russia.20866');

// Кодировка UTF-8 (использовать осторожно)
setlocale(LC_ALL, 'Russian_Russia.65001');
?>


Второй способ выстроить массив в алфавитном порядке PHP


Если данный способ не устроит и Вы хотите пойти сложным путём, то создайте массив следующего вида:

Код PHP

    [0] => а
    [1] => б
    [2] => в
    [3] => г
    [4] => д
    [5] => е
    [6] => ё
    [7] => ж
    [8] => з
    [9] => и
    [10] => й
    [11] => к
    [12] => л
    [13] => м
    [14] => н
    [15] => о
    [16] => п
    [17] => р
    [18] => с
    [19] => т
    [20] => у
    [21] => ф
    [22] => х
    [23] => ц
    [24] => ч
    [25] => ш
    [26] => щ
    [27] => ъ
    [28] => ы
    [29] => ь
    [30] => э
    [31] => ю
    [32] => я 

И переберите по первой букве второй массив.
Первую букву какого-либо элемента массива вычисляем так:

Код PHP

$city[1]='Москва'; // например элемент с индексом 1

$first_letter = mb_substr($city[1],0,1,'UTF-8'); // получим букву "М"

Поскольку работаем с русскими буквами (многобайтной кодировкой), то использовать лучше функцию mb_substr, а в конце лучше точно указать кодировку данных переменной или массива, в нашем случае UTF-8.

Спасибо за внимание! Надеюсь информация была полезна. Если есть вопросы, то пишите в комментариях.
 



Похожие статьи


Комментарии к статье (vk.com)