W3docs

Освоение 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, когда типы значений известны заранее.

Сортировка ассоциативного массива

php— editable, runs on the server

Этот код выведет:

orange - 3
apple - 2
banana - 1

Значения теперь упорядочены от наибольшего к наименьшему, и что важно — каждое название фрукта по-прежнему указывает на собственное количество: arsort() сохранила пары ключ/значение. Именно это делает функцию пригодной для таблиц лидеров или прайс-листов.

Сортировка с флагом

php— editable, runs on the server

Этот код выведет:

1 - 5
4 - 4
0 - 3
2 - 2
3 - 1

Array $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; выбирайте флаг сортировки, соответствующий типам ваших данных. Когда нужна другая комбинация порядка, критерия (ключ или значение) или сохранения ключей, связанные функции из таблицы выше покрывают все возможные случаи.

Практика

Практика
Какова функциональность функции arsort() в PHP?
Какова функциональность функции arsort() в PHP?
Was this page helpful?