Сортировка ассоциативных массивов по значению
Часть раздела Логика и управление потоком путешествия по 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 )
?>Обе функции изменяют исходный массив напрямую, точно так же, как и их аналоги для индексированных массивов. Это делает их идеальными для организации таких данных, как оценки студентов, цены на товары или любого сценария, где необходимо выполнить сортировку по значению, сохраняя при этом целостность пар «ключ-значение».
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Задание
ЛегкоВы получите один входной параметр: ассоциативный массив имен сотрудников и их зарплат в формате 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);
?>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
1Продвинутые функции
Анонимные функцииЗамыкания и 'use'Стрелочные функцииCallback-функцииИспользование 'call_user_func'Функции переменныхПередача по ссылкеРекурсивные функцииИтоги: ассорти из функций4Многомерные массивы
Создание 2D-массиваДоступ к элементам 2D-массиваИзменение элементов 2D-массиваИтерация с вложенными цикламиДвумерные ассоциативные массивыИтоги: Упражнение «Простая сетка»2Продвинутая работа с массивами
Добавление с помощью 'array_push'Удаление с помощью 'array_pop'Добавление с помощью 'array_unshift'Удаление с помощью 'array_shift'Слияние индексных массивовСлияние ассоциативных массивовИзвлечение с помощью 'array_slice'Поиск значений с 'in_array'Поиск ключей с 'array_search'Итоги: Упражнение «Плейлист»3Сортировка массивов
Сортировка индексных массивов по возрастаниюСортировка индексных массивов по убываниюСортировка ассоциативных массивов по значениюСортировка ассоциативных массивов по ключуСортировка в естественном порядкеПользовательская сортировка с помощью 'usort'Итоги: Сортировка таблицы лидеров