Освоение arsort() в PHP: сортировка массивов по значению в порядке убывания
Узнайте, как использовать функцию arsort() в PHP для сортировки ассоциативных массивов по убыванию с сохранением связей ключей.
arsort() сортирует ассоциативный array по убыванию значений, сохраняя при этом связь каждого значения с исходным ключом. Буква «a» означает associative (связи ключей сохраняются), а «r» — reverse (наибольшее значение идёт первым). На этой странице рассматриваются синтаксис, необязательные флаги сортировки, выполняемые примеры и отличия arsort() от других функций сортировки PHP.
Используйте arsort() всякий раз, когда ключи несут смысловую нагрузку, которую нельзя потерять — например, словарь названий товаров и цен, имён пользователей и счётов или категорий и количества элементов — и вы хотите получить наибольшие значения в начале.
Синтаксис
arsort(array &$array, int $flags = SORT_REGULAR): true$array— сортируемый array. Передаётся по ссылке, поэтомуarsort()изменяет array на месте, а не возвращает новый. Сама функция возвращаетtrue.$flags— необязательный. Управляет способом сравнения значений. По умолчанию равенSORT_REGULAR.
Флаги сортировки
Аргумент $flags изменяет способ сравнения двух значений:
SORT_REGULAR— сравнивать элементы обычным образом, не изменяя их типы (по умолчанию).SORT_NUMERIC— сравнивать элементы как числа.SORT_STRING— сравнивать элементы как string.SORT_NATURAL— сравнивать строки с помощью алгоритма «естественного порядка» (например,"img10"идёт после"img2").SORT_FLAG_CASE— комбинировать сSORT_STRINGилиSORT_NATURALчерез|, чтобы сделать сравнение строк нечувствительным к регистру.
Выбор правильного флага имеет значение: при значении по умолчанию SORT_REGULAR числовые строки "10" и "9" сравниваются как числа, однако в смешанном array результаты могут оказаться неожиданными. Явно указывайте SORT_NUMERIC или SORT_STRING, когда типы значений известны заранее.
Сортировка ассоциативного массива
Этот код выведет:
orange - 3
apple - 2
banana - 1Значения теперь упорядочены от наибольшего к наименьшему, и что важно — каждое название фрукта по-прежнему указывает на собственное количество: arsort() сохранила пары ключ/значение. Именно это делает функцию пригодной для таблиц лидеров или прайс-листов.
Сортировка с флагом
Этот код выведет:
1 - 5
4 - 4
0 - 3
2 - 2
3 - 1Array $numbers отсортирован по убыванию значений с использованием SORT_NUMERIC. Обратите внимание: исходные числовые ключи перемещаются вместе со своими значениями, а не переиндексируются как 0, 1, 2…. Если сохранять ключи не нужно, используйте rsort(), которая перенумеровывает array.
arsort() и другие функции сортировки
Функции сортировки массивов в PHP образуют единое семейство. Выбор нужной сводится к двум вопросам: сортировать по значению или по ключу? и сохранять ключи или нет?
| Функция | Сортирует по | Порядок | Сохраняет ключи |
|---|---|---|---|
asort() | значению | по возрастанию | да |
arsort() | значению | по убыванию | да |
sort() | значению | по возрастанию | нет (переиндексация) |
rsort() | значению | по убыванию | нет (переиндексация) |
ksort() | ключу | по возрастанию | да |
krsort() | ключу | по убыванию | да |
Таким образом, arsort() — это функция семейства, отвечающая за «убывание, по значению, с сохранением ключей». Она является зеркальным отражением asort().
Типичные подводные камни
- Функция возвращает
true, а не отсортированный array. Запись$sorted = arsort($array);присваивает$sortedзначениеtrue. Сортировка происходит непосредственно в исходном$array. - Числовые ключи не переиндексируются. В этом и есть смысл
arsort(). Если после сортировки нужна чистая последовательность0, 1, 2…, используйтеrsort(). - Сравнение смешанных типов при
SORT_REGULARможет дать неожиданный порядок. Передавайте явный флаг, если ваш array смешивает строки и числа. - Для пользовательской логики сравнения (сортировка объектов или по вычисляемому ключу) обратитесь к
uasort(), которая позволяет передать собственный callback-обработчик сравнения с сохранением ключей.
Заключение
arsort() сортирует array по убыванию значений, сохраняя привязку каждого ключа к своему значению, что делает её идеальной для ранжированных данных с метками — таких как счета или цены. Помните, что сортировка выполняется на месте и функция возвращает true; выбирайте флаг сортировки, соответствующий типам ваших данных. Когда нужна другая комбинация порядка, критерия (ключ или значение) или сохранения ключей, связанные функции из таблицы выше покрывают все возможные случаи.