сортировать по алфавиту массив php
Как отсортировать массив в алфавитном порядке в PHP?
При работе на многих сайтах часто встречается вопрос сортировки данных массива в алфавитном порядке. Многие для этого пишут дополнительные массивы, сравнивают крупные таблицы и перебирают каждое название. Этот вариант не самый лучший, хотя его мы тоже рассмотрим. В данной статье я бы хотел предложить самый простой и короткий путь, который при внимательном прочтении мануалов можно найти в документации.
Массив в алфавитном порядке PHP
Способ достаточно прост и заключается в двух шагах: установке локали (setlocal) и непосредственно сортировки массива. Рассмотрим пример с комментариями.
Код PHP
Демонстрация Скачать исходники
В демонстрации можете посмотреть работу скрипта. При желании можете также скачать архив с файлом.
Если у Вас сервер не на Windows, то нужно будет установить другие локали или сразу несколько:
Как установить локаль для других кодировок в PHP?
Второй способ выстроить массив в алфавитном порядке PHP
Если данный способ не устроит и Вы хотите пойти сложным путём, то создайте массив следующего вида:
Код PHP
И переберите по первой букве второй массив.
Первую букву какого-либо элемента массива вычисляем так:
Код PHP
Поскольку работаем с русскими буквами (многобайтной кодировкой), то использовать лучше функцию mb_substr, а в конце лучше точно указать кодировку данных переменной или массива, в нашем случае UTF-8.
Спасибо за внимание! Надеюсь информация была полезна. Если есть вопросы, то пишите в комментариях.
sort — Сортирует массив
Описание
Эта функция сортирует массив. После завершения работы функции элементы массива будут расположены в порядке возрастания.
Список параметров
Дополнительный второй параметр sort_flags можно использовать для изменения поведения сортировки, используя следующие значения:
Возвращаемые значения
Возвращает TRUE в случае успешного завершения или FALSE в случае возникновения ошибки.
Список изменений
Версия | Описание |
---|---|
5.4.0 | Добавлена поддержка SORT_NATURAL и SORT_FLAG_CASE в параметре sort_flags |
5.0.2 | Добавлена поддержка SORT_LOCALE_STRING |
Примеры
Пример #1 Пример использования sort()
Результат выполнения данного примера:
Фрукты отсортированы в алфавитном порядке.
Пример #2 Пример использования sort() с регистронезависимым естественным упорядочением
Результат выполнения данного примера:
Примечания
Замечание: Как и большинство функций сортировки в PHP, sort() использует реализацию алгоритма » быстрой сортировки. Основной элемент выбирается из середины сортируемой части, достигая таким образом оптимального времени для уже отсортированных массивов. Следует иметь в виду, что это является деталью реализации и на нее не следует полагаться.
Будьте осторожны при сортировке массивов, содержащих элементы разных типов, так как в этом случае результат работы функции sort() может быть непредсказуемым.
Сортировка массивов в php: ksort, asort и прочие sort’ы
Поговорим о сортировке массивов.
Более подробную информацию и примеры вы всегда можете найти в документации по функциям сортировки.
Допустим у нас есть массив
Он неправильно отсортирован, как видите ключи (1,2,3) и значения (виноград, арбуз, банан) идут не по порядку. Давайте это исправим:
Сортировка массива по ключу
Сортировка массива по значению
Свои способы сортировки
Если предложенные способы сортировки вам не подходят, то можно создать свой способ сортировки ключей и значений массивов. Для этого есть 3 функции uasort, uksort и usort. С их помощью мы можем задать свою callback функцию, которая будет сравнивать элементы между собой и определять какой из них «больше» и какой «меньше».
Давайте рассмотрим как они работают напримере функции uasort, которая сравнивает значения с сохранением ключей.
Применить нашу новую функцию можно так:
Сохранение ключей означает, что каждый ключ как бы привязан к своему значению.
Если сортировка не дает ожидаемый результат, то изучите флаги сортировки. По умолчанию используется обычный тип сортировки SORT_REGULAR
Флаги типа сортировки:
Флаг сортировки передается в функцию сортировки, например так:
Сортировка многомерных массивов
Создадим функцию, которая нам поможет в сортировке массивов
Пример работы этой функции array_orderby() :
Если вам нужно что-то совсем уж специфическое при сортировки многомерных массивов
Можете создать и другие callback функции сортировки самостоятельно.
Массивы на «стероидах»
Часто работаете с массивами? Тогда вам понравится это расширение для работы с коллекциями.
Рассмотрим несколько примеров.
Простая сортировка чисел:
Сортировка по одной «колонке» ассоциативного массива:
Сортировка по нескольким аттрибутам одновременно:
Вы также можете использовать свои функции сортировки при работе с коллекциями:
Коллекции позволяют работать с массивами как в Laravel и функции этого замечательного инструмента далеко не ограничиваются сортировкой.
Изучите документацию и вы влюбитесь в коллекции.
Как сортировать массивы в PHP
Russian (Pусский) translation by Pembelight (you can also view the original English article)
Определенную информацию всегда легче получать из отсортированных данных, в обратном случае вам приходится пересматривать по очереди каждый элемент массива. Например, предположим, что вы храните оценки разных учеников одного класса в массиве или таблице. Если данные не отсортированы по оценкам, вам нужно пересмотреть оценку каждого учащегося, чтобы определить, кто получил самую высокую или или самую низкую. Если данные уже отсортированы от самой низкой к более высокой, то просто взглянув на оценку первого ученика, вы будете знать этот показатель.
Сортировка делает много простых и еффективных задач на основе доступа или получения определенного набора данных. В этом уроке мы узнаем, как использовать встроенные функции PHP для сортировки различных типов массивов.
Сортировка массива по значению
Вот несколько примеров, которые помогут вам быстро понять разницу между всеми типами сортировки.
В примере обычной сортировки числовые строки преобразуются в их числовые значения, и сортировка выполняется соответствующим образом. Строка «Apple» не является числовой, поэтому она остается нетронутой и сравнивается как строка.
Во втором примере наводится числовая сортировка, и мы хотим, чтобы данные сортировались по числовому значению, поэтому «Apple» преобразуется в числовое значение 0 и идет первым. Остальные значения отсортированы ожидаемым образом.
Сортировка ассоциативных массивов
Ассоциации ключевых значений важны, в случае если вы имеете дело с ассоциативными массивами. Рассмотрим следующий пример, где ассоциативный массив используется для хранения имен разных людей и их любимых фруктов. Если вы хотите отсортировать список в алфавитном порядке по названию фруктов, использование функции sort() из предыдущего раздела приведет к потере ассоциативных ключей.
Как видите, мы не только потеряли взаимосвязь между людьми и их любимыми фруктами, мы также потеряли имена этих людей. Каждому отсортированному значению был присвоен новый числовой индекс, основанный на его позиции в отсортированном массиве.
Сортировка элементов массива по значению с помощью пользовательских функций
С помощью разных значений вашим потребностям могут соответствовать четыре функции сортировки. Однако иногда ваши критерии сравнения элементов массива могут отличаться.
Допустим, у вас есть массив случайных слов, которые нужно отсортировать по алфавиту. Но перед этим вы ещё хотите их отсортировать по длине. Например, в традиционной алфавитной сортировке zoo будет следовать за apple. С другой стороны, если вы хотите показать сначала короткие слова, а потом длинные, то zoo появится перед apple. В том же наборе букв, ape будет перед zoo из-за алфавитного порядка.
В основном, слова сначала сортируются по длине, а затем слова с одинаковым количеством букв сортируются в алфавитном порядке в пределах своей группы. Этот тип сортировки не встроен в PHP, поэтому нам нужно написать собственную функцию.
Для таких случаев PHP предоставляет вам пару функций, которые можно использовать для передачи массива, подлежащий сортировке, вместе с именем вашей собственной функции сортировки.
Используйте функцию usort() для сортировки значений массива в обычных массивах. Точно так же можно использовать функцию uasort() для сортировки значений в ассоциативных массивах, сохраняя при этом ассоциаций ключевых значений.
Этот фрагмент кода показывает один из способов выполнения данной сортировки.
В функциях обратного вызова, предназначенных для пользовательской сортировки, мы должны вернуть целое число меньше 0, чтобы указать, что первое значение меньше второго. Если первое значение равно второму, возвращается 0. Если первое значение больше второго, возвращается целое число больше 0.
Как вы видите, в результате наша пользовательская функция сортировки переставляет слова в точности так, как мы хотели.
Сортировка массива по ключу
Вот основной пример сортировки:
В приведенном выше примере, чтобы отсортировать названия стран по длине их названия, а затем по алфавиту, мы использовали пользовательскую функцию сортировки из предыдущего раздела.
Сортировка многомерных массивов в PHP
В реальных проектах чаще всего имеют дело с многомерной информацией. Например, учебные заведения будут хранить оценки по разным предметам всех учащихся в одной таблице вместо создания новых таблиц для каждого предмета. Если вам понадобилось бы хранить похожую информацию в PHP, вы тоже предпочли использовать данный подход,а именно многомерный массив вместо отдельного массива для каждого предмета.
В этом уроке мы научимся сортировать многомерный массив, используя в качестве примера список самых высоких зданий в мире. Наш массив будет содержать информацию о здании: название, месторасположение (город, страна), количество этажей, общая высота в метрах, год постройки.
В конце мы просто перебираем основной массив и выводим информацию о каждом здании.
Послесловие
rsort
(PHP 4, PHP 5, PHP 7, PHP 8)
rsort — Сортирует массив в порядке убывания
Описание
Сортирует array по значению в порядке убывания.
Если оба сравниваемых значения эквивалентны, они сохраняют свой первоначальный порядок. До PHP 8.0.0 их относительный порядок в отсортированном массиве не был определён.
Список параметров
Необязательный второй параметр flags может использоваться для изменения поведения сортировки с использованием следующих значений:
Возвращаемые значения
Примеры
Пример #1 Пример использования rsort()
Результат выполнения данного примера:
Названия фруктов были отсортированы по алфавиту в обратном порядке.
Смотрите также
User Contributed Notes 6 notes
Like sort(), rsort() assigns new keys for the elements in array. It will remove any existing keys you may have assigned, rather than just reordering the keys. This means that it will destroy associative keys.
$animals = array(«dog»=>»large», «cat»=>»medium», «mouse»=>»small»);
print_r($animals);
//Array ( [dog] => large [cat] => medium [mouse] => small )
rsort($animals);
print_r($animals);
//Array ( [0] => small [1] => medium [2] => large )
Use KSORT() or KRSORT() to preserve associative keys.
A cleaner (I think) way to sort a list of files into reversed order based on their modification date.