使用 'array_reduce' 归约
本课属于 Coddy PHP 学习旅程的“逻辑与流程”单元。第 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)
预期输出:一个表示 reduce 运算结果的数字
亲手试试
<?php
// 读取输入
$numbers_input = trim(fgets(STDIN));
$operation = trim(fgets(STDIN));
// 将以逗号分隔的字符串转换为整数数组
$numbers = array_map('intval', explode(',', $numbers_input));
// TODO:在下方编写你的代码
// 根据运算类型创建回调函数
// 使用 array_reduce(),传入你的回调函数和合适的初始值
// 输出结果
echo $result;
?>这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: PHP 在线编译器