Asort: примеры (PHP)
asort(array &$array, int $flags = SORT_REGULAR): boolФункция asort в PHP выполняет сортировку ассоциативного массива по возрастанию значений с сохранением связи ключей и значений. Она используется, когда требуется упорядочить данные по значению, но при этом важно сохранить ассоциацию ключей.
Синтаксис функции: asort(array &$array, int $flags = SORT_REGULAR): bool
Параметры:
- $array – входной ассоциативный массив, передаваемый по ссылке. После выполнения функции массив будет отсортирован.
- $flags – необязательный параметр, определяющий поведение сортировки. Возможные значения:
- SORT_REGULAR – обычное сравнение элементов (типы не преобразуются)
- SORT_NUMERIC – числовое сравнение
- SORT_STRING – строковое сравнение
- SORT_LOCALE_STRING – строковое сравнение с учетом локали
- SORT_NATURAL – естественная сортировка строк
- SORT_FLAG_CASE – комбинация с SORT_STRING или SORT_NATURAL для регистронезависимой сортировки
Возвращаемое значение: функция возвращает true в случае успешного выполнения и false в случае ошибки.
$fruits = ["d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple"];
asort($fruits);
print_r($fruits);Array
(
[c] => apple
[b] => banana
[d] => lemon
[a] => orange
)$numbers = ["first" => 5, "second" => 2, "third" => 8, "fourth" => 1];
asort($numbers, SORT_NUMERIC);
print_r($numbers);Array
(
[fourth] => 1
[second] => 2
[first] => 5
[third] => 8
)$files = ["img1.png", "img10.png", "img12.png", "img2.png"];
asort($files, SORT_NATURAL);
print_r($files);Array
(
[0] => img1.png
[3] => img2.png
[1] => img10.png
[2] => img12.png
)В PHP существует несколько функций для сортировки массивов:
- arsort() – сортировка ассоциативного массива по убыванию значений с сохранением ключей
- ksort() – сортировка массива по ключам по возрастанию
- krsort() – сортировка массива по ключам по убыванию
- sort() – сортировка массива по значениям по возрастанию без сохранения ключей
- usort() – сортировка массива с использованием пользовательской функции сравнения
Выбор функции зависит от задачи: asort применяется при необходимости сохранить ключи и отсортировать по значениям, sort – когда ключи не важны, ksort – когда требуется сортировка по ключам.
$array = [1, 3, 2];
$result = asort($array);
var_dump($array);array(3) {
[0]=> int(1)
[2]=> int(2)
[1]=> int(3)
}Функция работает, но для индексированных массивов обычно используют sort().
$array = ["a" => 1, "b" => 2];
if (asort($array)) {
echo "Сортировка успешна";
} else {
echo "Ошибка сортировки";
}Сортировка успешна
Ошибкой считается только ситуация, когда параметр не является массивом.
В PHP 8.0 функция asort всегда возвращает true. В предыдущих версиях возвращалось true при успехе и false при ошибке, но с PHP 8.0 в случае невалидного параметра будет выброшена ошибка TypeError.
// PHP 7
$result = asort("not_array"); // Возвращает false
// PHP 8
$result = asort("not_array"); // TypeError: asort(): Argument #1 must be of type array$users = [
["name" => "John", "age" => 30],
["name" => "Alice", "age" => 25],
["name" => "Bob", "age" => 35]
];
usort($users, function($a, $b) {
return $a["age"] <=> $b["age"];
});
print_r($users);Array
(
[0] => Array
(
[name] => Alice
[age] => 25
)
[1] => Array
(
[name] => John
[age] => 30
)
[2] => Array
(
[name] => Bob
[age] => 35
)
)setlocale(LC_COLLATE, 'ru_RU.UTF-8');
$words = ["яблоко", "Абрикос", "банан", "Боб"];
asort($words, SORT_LOCALE_STRING | SORT_FLAG_CASE);
print_r($words);Array
(
[1] => Абрикос
[3] => Боб
[2] => банан
[0] => яблоко
)$data = [
'item_10' => 42,
'item_1' => 42,
'item_5' => 17,
'item_2' => 17
];
// Сначала сортируем по значениям, затем по ключам
asort($data);
ksort($data);
print_r($data);Array
(
[item_2] => 17
[item_5] => 17
[item_1] => 42
[item_10] => 42
)Asort в Python
В Python для сортировки словаря по значениям используется функция sorted() с параметром key:
fruits = {"d": "lemon", "a": "orange", "b": "banana", "c": "apple"}
sorted_fruits = dict(sorted(fruits.items(), key=lambda item: item[1]))
print(sorted_fruits){'c': 'apple', 'b': 'banana', 'd': 'lemon', 'a': 'orange'}Asort в Javascript
В JavaScript объекты не гарантируют порядок свойств, но можно создать отсортированный массив пар ключ-значение:
const fruits = {d: 'lemon', a: 'orange', b: 'banana', c: 'apple'};
const sorted = Object.fromEntries(
Object.entries(fruits).sort(([,a], [,b]) => a.localeCompare(b))
);
console.log(sorted);{c: 'apple', b: 'banana', d: 'lemon', a: 'orange'}Asort в MySQL
В MySQL сортировка происходит в запросе ORDER BY, но это применяется к результатам запроса, а не к структурам данных:
SELECT key_column, value_column FROM table ORDER BY value_column;