Rsort: примеры (PHP)
rsort(array &array [, int flags]): boolФункция rsort в PHP используется для сортировки массива в обратном порядке (по убыванию значений). Она относится к функциям сортировки, которые работают непосредственно с исходным массивом, изменяя его.
Функция применяется, когда требуется отсортировать индексированный массив по значениям в порядке от большего к меньшему, при этом ключи массива теряются и заменяются числовыми индексами, начиная с 0.
- array &$array - обязательный аргумент. Передаваемый массив для сортировки. Передается по ссылке, поэтому функция изменяет исходный массив.
- 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] => Апельсин
)
$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
)- 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 8.0: функция теперь выбрасывает исключение
TypeError, если аргументы не соответствуют ожидаемым типам. Ранее выдавалась ошибка уровня E_WARNING. - PHP 7.0: добавлена поддержка флага
SORT_FLAG_CASEв комбинации сSORT_STRINGилиSORT_NATURAL.
$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 с пользовательской функцией.
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
)
)
$files = ["file10.txt", "file2.txt", "file1.txt"];
rsort($files, SORT_NATURAL);
print_r($files);
Array
(
[0] => file10.txt
[1] => file2.txt
[2] => file1.txt
)
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;
В Python и JavaScript методы обычно возвращают отсортированный массив или изменяют исходный, но в JavaScript метод sort() по умолчанию сортирует как строки. В PHP rsort всегда работает с исходным массивом и сбрасывает ключи.