Menu
Coddy logo textTech

Сортировка ассоциативных массивов по значению

Часть раздела Логика и управление потоком путешествия по PHP на Coddy. Урок 22 из 68.

При работе с ассоциативными массивами часто требуется сортировать их по значениям, сохраняя связи между ключами и значениями. PHP предоставляет для этой цели две специализированные функции: asort() для сортировки по возрастанию и arsort() для сортировки по убыванию.

Вот как работает asort() для сортировки по значениям в порядке возрастания:

<?php
$students = [
    "Alice" => 85,
    "Bob" => 92,
    "Charlie" => 78,
    "Diana" => 96
];

asort($students);
print_r($students);
// Выводит: Array ( [Charlie] => 78 [Alice] => 85 [Bob] => 92 [Diana] => 96 )
?>

Обратите внимание, что оценки теперь расположены от самой низкой к самой высокой, но имя каждого ученика по-прежнему правильно сопоставлено с его оценкой. Это ключевое преимущество asort() перед обычной sort(). Она сохраняет связь между ключами и значениями.

Для порядка descending функция arsort() работает аналогично, но располагает значения от наибольшего к наименьшему:

<?php
arsort($students);
print_r($students);
// Выводит: Array ( [Diana] => 96 [Bob] => 92 [Alice] => 85 [Charlie] => 78 )
?>

Обе функции напрямую изменяют исходный array, как и соответствующие им индексированные array. Это делает их идеальными для упорядочивания таких данных, как оценки студентов, цены на товары или любые другие случаи, когда необходимо сортировать по значению, сохраняя пары ключ–значение.

challenge icon

Задание

Легко

Вы получите один входной параметр: ассоциативный массив с именами сотрудников и их зарплатами в формате JSON. Прочитайте входные данные, преобразуйте строку JSON в массив, используйте arsort(), чтобы отсортировать employees по зарплате в порядке descending (от самой высокой к самой низкой), и выведите sorted array с помощью print_r().

Формат входных данных: Одна строка, содержащая объект JSON с именами сотрудников в качестве ключей и зарплатами в качестве значений (пример: {"John":45000,"Sarah":52000,"Mike":38000,"Lisa":61000})

Ожидаемый результат: Отсортированный ассоциативный массив в порядке descending по значениям зарплат, выведенный с помощью print_r()

Попробуйте сами

<?php
// Прочитать ввод
$input = fgets(STDIN);

// Преобразовать JSON в ассоциативный массив
$employees = (array)json_decode($input, true);

// TODO: Напишите ваш код ниже, чтобы отсортировать массив по зарплате в порядке убывания


// Вывести отсортированный массив
print_r($employees);
?>
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Онлайн-компилятор PHP