Menu
Coddy logo textTech

Пользовательская сортировка с помощью 'usort'

Часть раздела Логика и управление потоком путешествия по PHP на Coddy. Урок 25 из 68.

Когда встроенные функции сортировки PHP не отвечают вашим конкретным потребностям, функция usort() обеспечивает максимальную гибкость, позволяя вам точно определить, как элементы должны сравниваться и упорядочиваться. Эта функция принимает ваш массив и пользовательскую функцию сравнения, которую вы пишете для определения логики сортировки.

Функция сравнения принимает два элемента из массива и должна возвращать целое число: отрицательное число, если первый элемент должен стоять перед вторым, ноль, если они равны, или положительное число, если первый должен стоять после второго.

<?php
function compareByLength($a, $b) {
    return strlen($a) - strlen($b);
}

$words = ["elephant", "cat", "butterfly", "dog"];
usort($words, "compareByLength");
print_r($words);
// Вывод: Array ( [0] => cat [1] => dog [2] => elephant [3] => butterfly )
?>

В этом примере функция сравнения вычисляет разницу между длинами строк. Когда strlen($a) - strlen($b) возвращает отрицательное число, это означает, что первая строка короче и должна идти первой в отсортированном массиве.

Как и другие функции сортировки PHP, usort() изменяет исходный массив напрямую. Эта мощная функция открывает возможности для сортировки по любым критериям, которые вы можете себе представить — будь то длина строки, пользовательская бизнес-логика или сложные сравнения по нескольким полям.

challenge icon

Задание

Легко

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

Формат входных данных: Одна строка, содержащая массив чисел в формате JSON (пример: [29.99,15.50,42.00,8.75,33.25])

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

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

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

// TODO: Создайте функцию сравнения и используйте usort() для сортировки массива

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

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

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

Потренируйтесь самостоятельно: Онлайн-компилятор PHP