Сортировка ассоциативных массивов по значению
Часть раздела Логика и управление потоком путешествия по 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. Это делает их идеальными для упорядочивания таких данных, как оценки студентов, цены на товары или любые другие случаи, когда необходимо сортировать по значению, сохраняя пары ключ–значение.
Задание
ЛегкоВы получите один входной параметр: ассоциативный массив с именами сотрудников и их зарплатами в формате 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);
?>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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'Итоги: Сортировка таблицы лидеровПотренируйтесь самостоятельно: Онлайн-компилятор PHP