Сортировка: asort(), arsort()

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

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

Здесь на сцену выходят функции `asort()` и `arsort()`. Буква "а" в названии означает "associative" и говорит о главном: эти функции сохраняют связь между ключом и значением . `asort()` сортирует массив по значениям в порядке возрастания, сохраняя ключи. `arsort()` делает то же самое, но в обратном (reverse) порядке. Этот тренажер научит вас пользоваться этими незаменимыми инструментами для работы с ассоциативными данными.

Список тем

Сортировка с сохранением ключей

id: 38974_task_asort_1

Представим, что у нас есть массив с баллами студентов, где ключ — это имя, а значение — балл. Нам нужно отсортировать студентов по успеваемости от худшего к лучшему, не теряя их имена. Заполните пропуск, чтобы выполнить эту задачу.

Заполните пропуски
<?php
$scores = [
    'John' => 85,
    'Jane' => 92,
    'Peter' => 78
];

// Сортируем по баллам, сохраняя имена
input1S($scores);

print_r($scores);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Обратная сортировка с сохранением ключей

id: 38974_task_asort_2

Теперь создадим рейтинг лучших студентов. Используя тот же массив, отсортируйте его по баллам в порядке убывания (от лучшего к худшему), сохранив при этом имена студентов (ключи). Впишите название нужной функции.

Заполните пропуски
<?php
$scores = [
    'John' => 85,
    'Jane' => 92,
    'Peter' => 78
];

// Сортируем для получения рейтинга
input1S($scores);

print_r($scores);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Результат работы asort()

id: 38974_task_asort_3

Давайте проверим, как вы поняли принцип работы `asort()`. Перед вами ассоциативный массив с расстояниями до городов. Проанализируйте код и выберите, как будет выглядеть массив после сортировки.

Выберите правильный вариант ответа
<?php
$distances = [
    'city_c' => 300,
    'city_a' => 150,
    'city_b' => 500
];

asort($distances);
print_r($distances);
?>
Сообщения
Проверить
Показать подсказку

Не та функция сортировки

id: 38974_task_asort_4

Программист хотел отсортировать инвентарь по количеству, сохранив названия предметов. Но он использовал функцию `sort()`, которая сбросила все ключи. Исправьте название функции, чтобы код сохранял названия предметов (ключи).

Найдите ошибку и исправьте
<?php
$inventory = ['Potion' => 10, 'Sword' => 1, 'Shield' => 1];
 
// Ошибка: sort() удалит ключи 'Potion', 'Sword', 'Shield'
sort($inventory);
 
print_r($inventory);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Сортировка по убыванию: предскажите результат

id: 38974_task_asort_5

Теперь ваша очередь. Перед вами массив возрастов. После применения `arsort()` массив изменится. Напишите в поле ответа, как именно будет выглядеть результат вывода `print_r()`. Будьте внимательны к ключам и значениям.

Что должно получиться?
<?php
$ages = [
    'John' => 30,
    'Jane' => 45,
    'Kate' => 22
];

arsort($ages);

print_r($ages);
?>
Сообщения
Проверить
Показать подсказку

Сборка скрипта для сортировки продуктов

id: 38974_task_asort_6

Соберите из фрагментов PHP-скрипт. Цель: отсортировать массив продуктов по цене (значение) от самой дешевой к самой дорогой, сохранив артикулы (ключи). В наборе есть лишние и неверные строки.

Перетяните в правильном порядке строки из одного блока в другой
$products = ['p003' => 25, 'p001' => 100, 'p002' => 50];
asort($products);
print_r($products);
?>
<?php
$sorted = asort($products);
sort($products);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Естественная сортировка с сохранением ключей

id: 38974_task_asort_7

Представьте, что у вас есть версии продукта, и вам нужно их отсортировать. Обычная сортировка не справится с 'v10' и 'v2'. Используйте правильную функцию и флаг из банка, чтобы выполнить "естественную" сортировку с сохранением ключей.

Нужно правильно расставить в пропуски предложенные варианты
<?php
$versions = [
    'release1' => 'v10.1',
    'release2' => 'v2.5',
    'release3' => 'v1.9'
];

input1S($versions, input2S);

print_r($versions);
?>
asort
sort
SORT_NATURAL
SORT_STRING
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру