Menu
CoddyTech

回顾:数据处理

本课属于 Coddy PHP 学习旅程的“逻辑与流程”单元。第 45 课,共 68 课。

challenge icon

挑战

简单

你将收到 3 个输入:以逗号分隔的员工姓名列表、以逗号分隔的对应员工本周工作时长列表,以及最低工作时长阈值。第一个输入包含姓名,格式为 Alice,Bob,Charlie,Diana,Eve;第二个输入包含以数字表示的工作时长,格式为 45,32,50,28,40;第三个输入是以数字表示的最低工作时长阈值(例如:35)。

读取这 3 个输入,并将它们转换为合适的数组。创建一个组合后的关联数组,其中员工姓名为键,工作时长为值。然后使用数组高阶函数执行以下操作:

  1. 使用 array_filter() 和自定义回调函数,只保留工作时长达到或超过最低工作时长阈值的员工
  2. 使用 array_map() 和自定义回调函数,计算筛选后员工的加班工资(加班指超过 40 小时的部分,按每小时 25 美元的正常时薪的 1.5 倍支付)
  3. 使用 array_reduce() 和自定义回调函数,计算所有筛选后员工的加班工资总额

按以下格式输出结果:

  • 首先,分别在单独的行中输出每位符合条件的员工姓名和加班工资,格式为 Name: $Amount(四舍五入到小数点后 2 位)
  • 最后,按 Total: $Amount 的格式输出加班工资总额(四舍五入到小数点后 2 位)

计算详情:

  • 正常工作时长(最多 40 小时):每小时 25 美元
  • 加班时长(超过 40 小时的部分):每小时 37.50 美元(时薪的 1.5 倍)
  • 如果员工工作了 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() 计算加班工资总额

// 输出结果
// 输出每位符合条件的员工的加班工资
// 输出加班工资总额

?>

逻辑与流程中的所有课

自己练习: PHP 在线编译器