Rsort: примеры (PHP)

Обратная сортировка массивов: полный обзор функции rsort в PHP
Раздел: Работа с массивами
rsort(array &array [, int flags]): bool
Описание функции rsort

Функция rsort в PHP используется для сортировки массива в обратном порядке (по убыванию значений). Она относится к функциям сортировки, которые работают непосредственно с исходным массивом, изменяя его.

Функция применяется, когда требуется отсортировать индексированный массив по значениям в порядке от большего к меньшему, при этом ключи массива теряются и заменяются числовыми индексами, начиная с 0.

Аргументы функции
  1. array &$array - обязательный аргумент. Передаваемый массив для сортировки. Передается по ссылке, поэтому функция изменяет исходный массив.
  2. int $flags = SORT_REGULAR - необязательный аргумент. Флаг, определяющий поведение сравнения элементов. Доступные значения:
    • SORT_REGULAR - обычное сравнение элементов (без изменения типов).
    • SORT_NUMERIC - числовое сравнение элементов.
    • SORT_STRING - строковое сравнение элементов.
    • SORT_LOCALE_STRING - строковое сравнение с учетом текущей локали.
    • SORT_NATURAL - строковое сравнение с использованием "естественного порядка" (как в natsort).
    • SORT_FLAG_CASE - может быть объединен с SORT_STRING или SORT_NATURAL для регистронезависимой сортировки (через побитовое ИЛИ).
Короткие примеры использования
Сортировка числового массива
$numbers = [3, 1, 4, 1, 5, 9, 2];
rsort($numbers);
print_r($numbers);
Array
(
    [0] => 9
    [1] => 5
    [2] => 4
    [3] => 3
    [4] => 2
    [5] => 1
    [6] => 1
)
Сортировка строкового массива
$fruits = ["яблоко", "Апельсин", "банан", "Груша"];
rsort($fruits, SORT_STRING);
print_r($fruits);
Array
(
    [0] => яблоко
    [1] => банан
    [2] => Груша
    [3] => Апельсин
)
Сортировка с флагом SORT_NATURAL
$items = ["img10", "img2", "img1", "img20"];
rsort($items, SORT_NATURAL);
print_r($items);
Array
(
    [0] => img20
    [1] => img10
    [2] => img2
    [3] => img1
)
Регистронезависимая сортировка
$letters = ["A", "c", "b", "E", "d"];
rsort($letters, SORT_STRING | SORT_FLAG_CASE);
print_r($letters);
Array
(
    [0] => E
    [1] => d
    [2] => c
    [3] => b
    [4] => A
)
Похожие функции в PHP
  • sort() - сортирует массив по возрастанию. Ключи сбрасываются.
  • asort() - сортирует ассоциативный массив по возрастанию значений с сохранением ключей.
  • arsort() - сортирует ассоциативный массив по убыванию значений с сохранением ключей.
  • krsort() - сортирует массив по убыванию ключей.
  • usort() - сортирует массив по пользовательской функции сравнения.

Функцию rsort предпочтительнее использовать для индексированных массивов, когда не требуется сохранение ключей и нужен обратный порядок сортировки. Для ассоциативных массивов или при необходимости сохранить ключи применяют arsort.

Типичные ошибки
Сортировка массива с разными типами данных
$mixed = [10, "5", 3, "15"];
rsort($mixed, SORT_REGULAR);
print_r($mixed);
Array
(
    [0] => 15
    [1] => 10
    [2] => 5
    [3] => 3
)

При SORT_REGULAR сравнение происходит без приведения типов, что может дать неожиданные результаты.

Игнорирование возвращаемого значения
$arr = [1, 2, 3];
$result = rsort($arr);
echo $result;  // 1
print_r($arr);  // массив изменен

Функция возвращает boolean, но основное действие — изменение исходного массива.

Попытка сохранить ключи
$assoc = ["a" => 5, "b" => 2, "c" => 8];
rsort($assoc);
print_r($assoc);
Array
(
    [0] => 8
    [1] => 5
    [2] => 2
)

Ключи теряются, для сохранения нужно использовать arsort().

Изменения в последних версиях PHP
  • PHP 8.0: функция теперь выбрасывает исключение TypeError, если аргументы не соответствуют ожидаемым типам. Ранее выдавалась ошибка уровня E_WARNING.
  • PHP 7.0: добавлена поддержка флага SORT_FLAG_CASE в комбинации с SORT_STRING или SORT_NATURAL.
Расширенные примеры
Сортировка многомерного массива по значению поля
Пример php
$users = [
    ["name" => "Иван", "score" => 45],
    ["name" => "Петр", "score" => 78],
    ["name" => "Мария", "score" => 32]
];

usort($users, fn($a, $b) => $b['score'] <=> $a['score']);
print_r($users);
Array
(
    [0] => Array
        (
            [name] => Петр
            [score] => 78
        )
    [1] => Array
        (
            [name] => Иван
            [score] => 45
        )
    [2] => Array
        (
            [name] => Мария
            [score] => 32
        )
)

Для многомерных массивов rsort не подходит, используется usort с пользовательской функцией.

Сортировка массива объектов
Пример php
class Product {
    public function __construct(public string $name, public float $price) {}
}

$products = [
    new Product("Книга", 500),
    new Product("Ручка", 50),
    new Product("Стол", 3000)
];

usort($products, fn($a, $b) => $b->price <=> $a->price);
print_r($products);
Array
(
    [0] => Product Object
        (
            [name] => Стол
            [price] => 3000
        )
    [1] => Product Object
        (
            [name] => Книга
            [price] => 500
        )
    [2] => Product Object
        (
            [name] => Ручка
            [price] => 50
        )
)
Естественная сортировка строк с числами
Пример php
$files = ["file10.txt", "file2.txt", "file1.txt"];
rsort($files, SORT_NATURAL);
print_r($files);
Array
(
    [0] => file10.txt
    [1] => file2.txt
    [2] => file1.txt
)
Сортировка с учетом локали
Пример php
setlocale(LC_COLLATE, 'ru_RU.UTF-8');
$words = ["яблоко", "ёж", "ежевика", "ягода"];
rsort($words, SORT_LOCALE_STRING);
print_r($words);

Результат зависит от установленной локали и её правил сортировки.

Аналоги в других языках

Rsort в Python

Метод sort() с параметром reverse=True или функция sorted():

numbers = [3, 1, 4, 1, 5, 9, 2]
numbers.sort(reverse=True)
print(numbers)  # [9, 5, 4, 3, 2, 1, 1]

Rsort в Javascript

Метод sort() с функцией сравнения:

let numbers = [3, 1, 4, 1, 5, 9, 2];
numbers.sort((a, b) => b - a);
console.log(numbers);  // [9, 5, 4, 3, 2, 1, 1]

Rsort в MySQL

Использование оператора ORDER BY с направлением DESC в запросе:

SELECT * FROM table_name ORDER BY column_name DESC;
Отличия от PHP

В Python и JavaScript методы обычно возвращают отсортированный массив или изменяют исходный, но в JavaScript метод sort() по умолчанию сортирует как строки. В PHP rsort всегда работает с исходным массивом и сбрасывает ключи.

PHP rsort function comments

En
Rsort Sort an array in descending order