Свертка с помощью 'array_reduce'
Часть раздела Логика и управление потоком путешествия по PHP на Coddy. Урок 43 из 68.
Функция array_reduce() работает иначе, чем array_map() и array_filter(). Вместо возврата нового массива она обрабатывает все элементы массива, чтобы получить одно значение. Это делает её идеальной для таких операций, как вычисление суммы, поиск максимальных значений или объединение всех элементов в один результат.
Функция принимает массив для обработки и функцию обратного вызова, которая задаёт способ объединения элементов, а также необязательный третий параметр: начальное значение. Функция обратного вызова получает два параметра: накопленный результат (называемый «carry») и текущий элемент массива.
<?php
function addNumbers($carry, $item) {
return $carry + $item;
}
$numbers = [1, 2, 3, 4, 5];
$sum = array_reduce($numbers, "addNumbers", 0);
// Результат: 15
?>В этом примере функция начинает работу с начального значения 0, затем многократно вызывает addNumbers, передавая ей текущую сумму и каждый элемент массива. Этот процесс накопления продолжается до тех пор, пока не будут обработаны все элементы, оставляя вам итоговое значение после свёртки.
Задание
ЛегкоВы получите два входных значения: список чисел, разделённых запятыми, и тип операции. Первое входное значение содержит числа в виде строки в формате 5,10,15,20,25, а второе — один символ, указывающий на операцию: S для суммы, P для произведения или M для максимума.
Считайте оба входных значения, преобразуйте числа, разделённые запятыми, в массив целых чисел, создайте пользовательскую функцию обратного вызова, выполняющую указанную операцию, используйте array_reduce() с вашей функцией обратного вызова и подходящим начальным значением, чтобы обработать все числа и получить один результат, а затем выведите итоговый результат.
Подробности операций:
S(Сумма): сложите все числа (начальное значение: 0)P(Произведение): перемножьте все числа (начальное значение: 1)M(Максимум): найдите наибольшее число (начальное значение: первое число в массиве или очень маленькое число)
Ваша функция обратного вызова должна принимать два параметра: накопленный результат (carry) и текущий элемент массива (item), а затем возвращать обновлённое накопленное значение в зависимости от типа операции.
Формат входных данных:
- Первая строка: числа, разделённые запятыми (пример:
5,10,15,20,25) - Вторая строка: тип операции —
S,PилиM(пример:S)
Ожидаемый вывод: одно число, представляющее результат операции свёртки
Попробуйте сами
<?php
// Считайте входные данные
$numbers_input = trim(fgets(STDIN));
$operation = trim(fgets(STDIN));
// Преобразуйте строку с разделителями-запятыми в массив целых чисел
$numbers = array_map('intval', explode(',', $numbers_input));
// TODO: Напишите свой код ниже
// Создайте функцию обратного вызова в зависимости от типа операции
// Используйте array_reduce() с вашей функцией обратного вызова и подходящим начальным значением
// Выведите результат
echo $result;
?>В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Логика и управление потоком
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