一组重要的循环结构,在函数式编程中经常使用,是array_map() /array_filter() /array_reduce() 。
这3个内置的PHP函数接收一个数组,和一个回调函数,在每次迭代中接收数组中的每个项目。
array_map() 返回一个新的数组,其中包含对数组中每一项运行回调函数的结果:
$numbers = [1, 2, 3, 4];
$doubles = array_map(fn($value) => $value * 2, $numbers);
//$doubles is now [2, 4, 6, 8]
array_filter() 产生一个新的数组,只获取那些回调函数返回 的项true
$numbers = [1, 2, 3, 4];
$even = array_filter($numbers, fn($value) => $value % 2 === 0)
//$even is now [2, 4]
array_reduce() 用于将一个数组减少到一个单一的值。
例如,我们可以用它来将一个数组中的所有项相乘:
$numbers = [1, 2, 3, 4];
$result = array_reduce($numbers, fn($carry, $value) => $carry * $value, 1)
注意最后一个参数,它是初始值。如果你省略了这一点,默认值是0 ,但这对我们的乘法例子是不适用的:
注意在
array_map(),参数的顺序是相反的,首先你有回调函数,然后是数组。这是因为我们可以用逗号传递多个数组(array_map(fn($value) => $value * 2, $numbers, $otherNumbers, $anotherArray);)。理想情况下,我们希望有更多的一致性,但事实就是如此。