![]() | Автор: Никита Иванов | 22 августа 2013 16:09 |
При работе на многих сайтах часто встречается вопрос сортировки данных массива в алфавитном порядке. Многие для этого пишут дополнительные массивы, сравнивают крупные таблицы и перебирают каждое название... Этот вариант не самый лучший, хотя его мы тоже рассмотрим. В данной статье я бы хотел предложить самый простой и короткий путь, который при внимательном прочтении мануалов можно найти в документации.
Способ достаточно прост и заключается в двух шагах: установке локали (setlocal) и непосредственно сортировки массива. Рассмотрим пример с комментариями.
Код PHP
Демонстрация Скачать исходники
В демонстрации можете посмотреть работу скрипта. При желании можете также скачать архив с файлом.
Если у Вас сервер не на Windows, то нужно будет установить другие локали или сразу несколько:
Опережу ответом один из вопросов - локаль для Украины в PHP выглядит так:
Как установить локаль для других кодировок в PHP?
Если данный способ не устроит и Вы хотите пойти сложным путём, то создайте массив следующего вида:
Код PHP
И переберите по первой букве второй массив.
Первую букву какого-либо элемента массива вычисляем так:
Код PHP
Поскольку работаем с русскими буквами (многобайтной кодировкой), то использовать лучше функцию mb_substr, а в конце лучше точно указать кодировку данных переменной или массива, в нашем случае UTF-8.
Спасибо за внимание! Надеюсь информация была полезна. Если есть вопросы, то пишите в комментариях.
Массив в алфавитном порядке 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.
Спасибо за внимание! Надеюсь информация была полезна. Если есть вопросы, то пишите в комментариях.
Временные зоны и часовые пояса в PHP Следующая статья
Как определить язык пользователя средствами PHP?
Похожие статьи
29 августа 2013 12:34 |
![]() |
03 апреля 2014 14:03 |
![]() |
14 сентября 2013 14:32 |
![]() |
31 августа 2013 21:06 |
![]() |
21 апреля 2014 15:20 |
![]() |