Итоги: Обработка данных
Часть раздела Логика и управление потоком путешествия по PHP на Coddy — урок 45 из 68.
Задание
ЛегкоВы получите три входных данных: список имен сотрудников через запятую, список соответствующих им отработанных часов за неделю через запятую и порог минимального количества часов. Первый ввод содержит имена в формате Alice,Bob,Charlie,Diana,Eve, второй ввод содержит количество часов в виде чисел в формате 45,32,50,28,40, а третий ввод — это порог минимального количества часов в виде числа (например: 35).
Прочитайте все три ввода и преобразуйте их в соответствующие массивы. Создайте комбинированный ассоциативный массив, где имена сотрудников являются ключами, а отработанные ими часы — значениями. Затем выполните следующие операции, используя функции высшего порядка для массивов:
- Используйте
array_filter()с пользовательской функцией обратного вызова, чтобы оставить только тех сотрудников, которые отработали количество часов, равное или превышающее минимальный порог. - Используйте
array_map()с пользовательской функцией обратного вызова для расчета оплаты сверхурочных для отфильтрованных сотрудников (сверхурочными считаются любые часы свыше 40, оплачиваемые по ставке в 1,5 раза выше обычной ставки в $25 за час). - Используйте
array_reduce()с пользовательской функцией обратного вызова, чтобы рассчитать общую сумму оплаты сверхурочных для всех отфильтрованных сотрудников.
Выведите результаты в следующем формате:
- Сначала выведите имя каждого подходящего сотрудника и сумму его оплаты за сверхурочные на отдельных строках в формате
Name: $Amount(округленно до 2 знаков после запятой). - В конце выведите общую сумму оплаты сверхурочных в формате
Total: $Amount(округленно до 2 знаков после запятой).
Детали расчета:
- Обычные часы (до 40): $25 за час
- Сверхурочные часы (свыше 40): $37.50 за час (ставка 1.5x)
- Если сотрудник отработал 40 часов или меньше, его оплата за сверхурочные составляет $0.00
Формат ввода:
- Первая строка: Имена сотрудников через запятую (например:
Alice,Bob,Charlie,Diana,Eve) - Вторая строка: Отработанные часы через запятую в виде чисел (например:
45,32,50,28,40) - Третья строка: Порог минимального количества часов в виде числа (например:
35)
Ожидаемый вывод: Каждый подходящий сотрудник с его оплатой за сверхурочные на отдельных строках, за которыми следует общая сумма оплаты сверхурочных; все суммы должны быть отформатированы до 2 знаков после запятой.
Попробуйте сами
<?php
// Чтение входных данных
$names = explode(',', trim(fgets(STDIN)));
$hours = explode(',', trim(fgets(STDIN)));
$minHours = intval(trim(fgets(STDIN)));
// Преобразование часов в целые числа
$hours = array_map('intval', $hours);
// Создание ассоциативного массива, объединяющего имена и часы
$employees = array_combine($names, $hours);
// TODO: Напишите свой код ниже
// 1. Используйте array_filter(), чтобы оставить сотрудников, отработавших минимум часов или больше
// 2. Используйте array_map(), чтобы рассчитать оплату за сверхурочные для отфильтрованных сотрудников
// 3. Используйте array_reduce(), чтобы рассчитать общую сумму оплаты за сверхурочные
// Вывод результатов
// Выведите оплату за сверхурочные для каждого подходящего сотрудника
// Выведите общую сумму оплаты за сверхурочные
?>Все уроки раздела Логика и управление потоком
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'Итоги: Обработка данных