Пользовательская сортировка с помощью '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()
Попробуйте сами
<?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'Итоги: Сортировка таблицы лидеровПотренируйтесь самостоятельно: Онлайн-компилятор PHP