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() изменяет исходный массив напрямую. Эта мощная функция открывает возможности для сортировки по любым критериям, которые вы можете себе представить — будь то длина строки, пользовательская бизнес-логика или сложные сравнения по нескольким полям.

quiz iconПроверьте себя

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

quiz iconПроверьте себя

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

quiz iconПроверьте себя

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

challenge icon

Задание

Легко

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

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

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

Шпаргалка

Функция 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 )
?>

Как и другие функции сортировки PHP, usort() изменяет исходный массив напрямую.

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

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

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

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

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

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