'array_filter' с пользовательской функцией
Часть раздела Логика и управление потоком путешествия по PHP на Coddy. Урок 42 из 68.
В то время как array_filter() без callback-функции удаляет пустые значения, его истинная сила проявляется, когда вы предоставляете пользовательскую callback-функцию. Это позволяет вам точно определить, какие элементы следует оставить, основываясь на ваших конкретных критериях.
Чтобы использовать пользовательскую функцию с array_filter(), передайте имя вашей функции в качестве второго параметра. Ваша функция обратного вызова должна принимать один параметр (текущий элемент массива) и возвращать true, чтобы сохранить элемент, или false, чтобы исключить его.
<?php
function isEven($number) {
return $number % 2 === 0;
}
$numbers = [1, 2, 3, 4, 5, 6, 7, 8];
$evenNumbers = array_filter($numbers, "isEven");
// Результат: [2, 4, 6, 8]
?>В этом примере функция isEven проверяет каждое число с помощью оператора остатка от деления. Только числа, которые возвращают true (четные числа), включаются в отфильтрованный результат. Этот подход дает вам полный контроль над логикой фильтрации, делая array_filter() невероятно универсальной для задач обработки данных.
Задание
ЛегкоВы получите два входных значения: список цен на товары, разделенных запятыми, и минимальный порог цены. Первый ввод содержит цены в виде строки в формате 15.99,45.00,8.50,120.00,22.75, а второй ввод — это минимальный порог цены в виде числа (например: 20).
Прочитайте оба входных значения, преобразуйте разделенные запятыми цены в массив чисел, создайте пользовательскую функцию обратного вызова (callback), которая проверяет, больше ли цена или равна порогу, используйте array_filter() с вашей пользовательской функцией, чтобы оставить только те цены, которые соответствуют порогу, и выведите каждую отфильтрованную цену на отдельной строке в том порядке, в котором они появляются.
Ваша пользовательская функция обратного вызова должна принимать один параметр (цену) и возвращать true, если цена больше или равна порогу, или false в противном случае.
Формат входных данных:
- Первая строка: Цены на товары через запятую (например:
15.99,45.00,8.50,120.00,22.75) - Вторая строка: Минимальный порог цены в виде числа (например:
20)
Ожидаемый результат: Каждая цена, которая соответствует порогу или превышает его, выводится на отдельной строке с сохранением исходного порядка
Попробуйте сами
<?php
// Чтение входных данных
$prices_input = trim(fgets(STDIN));
$threshold = floatval(fgets(STDIN));
// Преобразование цен, разделенных запятыми, в массив
$prices = array_map('floatval', explode(',', $prices_input));
// TODO: Напишите свой код ниже
// Создайте пользовательскую функцию обратного вызова, которая проверяет, что цена >= threshold
// Используйте array_filter() с вашей пользовательской функцией
// Выведите каждую отфильтрованную цену на отдельной строке
?>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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'Итоги: Сортировка таблицы лидеров6Функции высшего порядка для массивов
Преобразование с помощью 'array_map''array_map' с пользовательской функциейФильтрация с помощью 'array_filter''array_filter' с пользовательской функциейСвертка с помощью 'array_reduce'Обход с помощью 'array_walk'Итоги: Обработка данныхПотренируйтесь самостоятельно: Онлайн-компилятор PHP