如何在PHP中使用array_map/array_filter/array_reduce(附代码)

101 阅读1分钟

一组重要的循环结构,在函数式编程中经常使用,是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);)。理想情况下,我们希望有更多的一致性,但事实就是如此。