Menu
Coddy logo textTech

Итоги: Обработка данных

Часть раздела Логика и управление потоком путешествия по PHP на Coddy — урок 45 из 68.

challenge icon

Задание

Легко

Вы получите три входных данных: список имен сотрудников через запятую, список соответствующих им отработанных часов за неделю через запятую и порог минимального количества часов. Первый ввод содержит имена в формате Alice,Bob,Charlie,Diana,Eve, второй ввод содержит количество часов в виде чисел в формате 45,32,50,28,40, а третий ввод — это порог минимального количества часов в виде числа (например: 35).

Прочитайте все три ввода и преобразуйте их в соответствующие массивы. Создайте комбинированный ассоциативный массив, где имена сотрудников являются ключами, а отработанные ими часы — значениями. Затем выполните следующие операции, используя функции высшего порядка для массивов:

  1. Используйте array_filter() с пользовательской функцией обратного вызова, чтобы оставить только тех сотрудников, которые отработали количество часов, равное или превышающее минимальный порог.
  2. Используйте array_map() с пользовательской функцией обратного вызова для расчета оплаты сверхурочных для отфильтрованных сотрудников (сверхурочными считаются любые часы свыше 40, оплачиваемые по ставке в 1,5 раза выше обычной ставки в $25 за час).
  3. Используйте 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(), чтобы рассчитать общую сумму оплаты за сверхурочные

// Вывод результатов
// Выведите оплату за сверхурочные для каждого подходящего сотрудника
// Выведите общую сумму оплаты за сверхурочные

?>

Все уроки раздела Логика и управление потоком