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