Arsort: примеры (PHP)
arsort(array &$array, int $flags = SORT_REGULAR): boolФункция arsort выполняет обратную сортировку массива по убыванию значений с сохранением ассоциации ключей. Применяется при необходимости упорядочить элементы по значению, но с сохранением связи ключ-значение. Это полезно для ассоциативных массивов, где ключи имеют смысловую нагрузку.
Функция принимает два параметра:
- array &$array - обязательный параметр, передаваемый по ссылке. Представляет массив для сортировки.
- int $flags = SORT_REGULAR - необязательный параметр, определяющий алгоритм сравнения элементов:
- SORT_REGULAR - обычное сравнение без преобразования типов.
- SORT_NUMERIC - числовое сравнение.
- SORT_STRING - строковое сравнение.
- SORT_LOCALE_STRING - сравнение с учетом локали.
- SORT_NATURAL - естественное упорядочение строк.
- SORT_FLAG_CASE - комбинируется с SORT_STRING или SORT_NATURAL для регистронезависимой сортировки.
$fruits = ["d" => "лимон", "a" => "апельсин", "b" => "банан", "c" => "яблоко"];
arsort($fruits);
print_r($fruits);Array
(
[c] => яблоко
[a] => апельсин
[d] => лимон
[b] => банан
)$numbers = ["первый" => 10, "второй" => 2, "третий" => 35];
arsort($numbers, SORT_NUMERIC);
print_r($numbers);Array
(
[третий] => 35
[первый] => 10
[второй] => 2
)$items = ["Item1", "item10", "item2", "ITEM5"];
arsort($items, SORT_NATURAL | SORT_FLAG_CASE);
print_r($items);Array
(
[1] => item10
[3] => ITEM5
[2] => item2
[0] => Item1
)- asort() - прямая сортировка по значению с сохранением ключей.
- rsort() - обратная сортировка по значению без сохранения ключей.
- krsort() - обратная сортировка по ключам.
- usort() - сортировка с пользовательской функцией сравнения.
Выбор функции зависит от задачи: для сохранения ассоциаций ключей применяют arsort или asort, при необходимости сортировки по ключам - krsort или ksort.
$var = "строка";
arsort($var);
var_dump($var);Warning: arsort() expects parameter 1 to be array, string given
$data = [100 => 'яблоко', 5 => 'груша'];
arsort($data);
print_r($data);Array
(
[100] => яблоко
[5] => груша
)Ключи сохраняются, но порядок элементов изменяется согласно значениям.
В PHP 8.0 функция arsort стала использовать устойчивую сортировку. Это означает, что элементы с одинаковыми значениями сохраняют свой исходный относительный порядок. В предыдущих версиях порядок одинаковых элементов мог быть произвольным.
$array = ['a' => 5, 'b' => 5, 'c' => 3];
arsort($array);
print_r($array);// PHP 8 и выше
Array
(
[a] => 5
[b] => 5
[c] => 3
)$users = [
['id' => 1, 'name' => 'Анна', 'score' => 85],
['id' => 2, 'name' => 'Иван', 'score' => 92],
['id' => 3, 'name' => 'Мария', 'score' => 78]
];
$scores = array_column($users, 'score', 'id');
arsort($scores);
foreach ($scores as $id => $score) {
$key = array_search($id, array_column($users, 'id'));
echo $users[$key]['name'] . ': ' . $score . "\n";
}Иван: 92 Анна: 85 Мария: 78
setlocale(LC_COLLATE, 'ru_RU.UTF-8');
$words = ['яблоко', 'Абрикос', 'банан', 'Ананас'];
arsort($words, SORT_LOCALE_STRING);
print_r($words);Array
(
[0] => яблоко
[2] => банан
[1] => Абрикос
[3] => Ананас
)class Product {
public function __construct(public string $name, public float $price) {}
}
$products = [
'p1' => new Product('Стол', 1500),
'p2' => new Product('Стул', 800),
'p3' => new Product('Лампа', 1200)
];
$prices = [];
foreach ($products as $key => $product) {
$prices[$key] = $product->price;
}
arsort($prices);
print_r($prices);Array
(
[p1] => 1500
[p3] => 1200
[p2] => 800
)Arsort в Python
# Сортировка словаря по значениям
items = {'d': 'лимон', 'a': 'апельсин', 'b': 'банан'}
sorted_items = dict(sorted(items.items(), key=lambda x: x[1], reverse=True))
print(sorted_items){'a': 'апельсин', 'd': 'лимон', 'b': 'банан'}Arsort в Javascript
// Преобразование объекта в массив пар, сортировка и сборка обратно
let items = {d: 'лимон', a: 'апельсин', b: 'банан'};
let sorted = Object.fromEntries(
Object.entries(items).sort(([,a], [,b]) => b.localeCompare(a))
);
console.log(sorted);{a: 'апельсин', d: 'лимон', b: 'банан'}Arsort в MySQL
SELECT * FROM fruits ORDER BY name DESC;В SQL сортировка происходит при выборке данных, ассоциативные связи не теряются.