Сортировка: sort(), rsort()

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

Тренажер PHP

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

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

Список тем

Сортировка чисел по возрастанию

id: 38973_task_sort_1

Начнем с самого простого. У вас есть массив чисел в произвольном порядке. Ваша задача — отсортировать его по возрастанию (от меньшего к большему), изменив сам массив. Заполните пропуск, используя нужную функцию.

Заполните пропуски
<?php
$numbers = [40, 15, 100, 2, 88];

// Сортируем массив по возрастанию
input1S($numbers);

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

Сортировка по убыванию

id: 38973_task_sort_2

Теперь выполним обратную операцию. Отсортируйте массив с результатами тестов по убыванию (от большего к меньшему). Впишите название соответствующей функции в пропуск.

Заполните пропуски
<?php
$scores = [78, 99, 85, 92, 71];

// Сортируем массив по убыванию
input1S($scores);

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

Сортировка строк

id: 38973_task_sort_3

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

Выберите правильный вариант ответа
<?php
$fruits = ['cherry', 'apple', 'banana'];

sort($fruits);

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

Частая ошибка: присваивание результата

id: 38973_task_sort_4

Очень важно помнить, что `sort()` и `rsort()` изменяют массив по ссылке и возвращают `true` или `false`. Программист допустил частую ошибку, присвоив результат `sort()` переменной. В итоге он получил не отсортированный массив, а `true`. Исправьте код, чтобы он работал правильно.

Найдите ошибку и исправьте
<?php
$data = [30, 10, 20];
 
// Ошибка: sort() возвращает bool, а не массив
$sorted_data = sort($data);
 
print_r($sorted_data);
?>
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Потеря ассоциативных ключей

id: 38973_task_sort_5

Функции `sort()` и `rsort()` сортируют массив по значениям, но при этом удаляют все существующие ключи (и числовые, и строковые), заменяя их новым нумерованным индексом от 0. Предскажите, что выведет `print_r()` после сортировки ассоциативного массива.

Что должно получиться?
<?php
$roles = [
    'role1' => 'User',
    'role3' => 'Admin',
    'role2' => 'Editor'
];

sort($roles);

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

Функции сортировки и их порядок

id: 38973_task_sort_6

В PHP много функций сортировки. Давайте сравним две изученные нами функции с их "родственниками", которые сохраняют ключи. Сопоставьте функцию с ее точным описанием.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Сортирует по значениям, по возрастанию, сбрасывая ключи.
Сортирует по значениям, по убыванию, сбрасывая ключи.
Сортирует по значениям, по возрастанию, **сохраняя** ключи.
rsort()
asort()
sort()
Сообщения
Проверить
Показать подсказку

Сортировка с флагами: SORT_NATURAL

id: 38973_task_sort_7

Стандартная сортировка считает, что 'image10.jpg' идет раньше 'image2.jpg', потому что символ '1' меньше '2'. Чтобы исправить это и сортировать "как человек", используется специальный флаг. Перетащите из банка правильную функцию и флаг для выполнения естественной сортировки.

Нужно правильно расставить в пропуски предложенные варианты
<?php
$files = ['image10.jpg', 'image2.jpg', 'image1.jpg'];

// Выполняем естественную сортировку
input1S(input2S, input3S);

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