Пользовательская сортировка с помощью 'usort'
Часть раздела Логика и управление потоком путешествия по PHP на Coddy. Урок 25 из 68.
Когда встроенные функции сортировки PHP не отвечают вашим конкретным требованиям, функция usort() обеспечивает максимальную гибкость, позволяя точно определить, как должны сравниваться и упорядочиваться элементы. Эта функция принимает ваш array и написанную вами пользовательскую функцию сравнения, которая определяет логику сортировки.
Функция сравнения получает два элемента из array и должна возвращать целое число: отрицательное число, если первый элемент должен находиться перед вторым, ноль, если они равны, или положительное число, если первый элемент должен находиться после второго.
<?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 )
?>В этом примере функция comparison вычисляет разницу между длинами строк. Когда strlen($a) - strlen($b) возвращает отрицательное число, это означает, что первая строка короче и должна располагаться первой в отсортированном array.
Как и другие функции сортировки PHP, usort() напрямую изменяет исходный array. Эта мощная функция открывает возможности для сортировки по любым критериям, которые вы можете себе представить, будь то длина строки, пользовательская бизнес-логика или сложные сравнения по нескольким полям.
Задание
ЛегкоВы получите один input: array цен на продукты в формате JSON. Прочитайте input, преобразуйте строку JSON в array, создайте comparison function, которая сортирует prices в порядке возрастания, используйте usort() с вашей comparison function для сортировки array и выведите sorted array с помощью print_r().
Input format: Одна строка, содержащая JSON array чисел (пример: [29.99,15.50,42.00,8.75,33.25])
Expected Output: sorted array в порядке возрастания по цене, отображённый с помощью 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