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() — он сохраняет связь между ключами и значениями.

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

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

Обе функции изменяют исходный массив напрямую, точно так же, как и их аналоги для индексированных массивов. Это делает их идеальными для организации таких данных, как оценки студентов, цены на товары или любого сценария, где необходимо выполнить сортировку по значению, сохраняя при этом целостность пар «ключ-значение».

quiz iconПроверьте себя

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

quiz iconПроверьте себя

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

quiz iconПроверьте себя

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

challenge icon

Задание

Легко

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

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

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

Шпаргалка

Используйте 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 )
?>

Используйте arsort() для сортировки ассоциативных массивов по значениям в порядке убывания:

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

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

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

<?php
// Чтение входных данных
$input = fgets(STDIN);

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

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


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

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

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