array_map()和array_reduce() 函数的区别是什么?

array_map()array_reduce() 是PHP中用于数组操作的两个函数,它们的主要区别在于功能和使用方式:

1. array_map()

  • 功能array_map() 函数用于将回调函数应用到数组的每个元素,返回一个新数组,新数组的元素是原数组对应元素经过回调函数处理后的结果。

  • 语法

    php
    array_map(callback $callback, array $array1, array ...$array)
    • $callback:要应用于每个数组元素的回调函数。
    • $array1, $array2, ...:要处理的数组。
  • 特点

    • 返回一个新数组,不改变原始数组。
    • 回调函数可以是匿名函数或已定义的函数。
    • 可以同时处理多个数组,将相同索引位置的元素作为参数传递给回调函数。
  • 示例

    php
    $numbers = [1, 2, 3, 4, 5]; $squares = array_map(function($num) { return $num * $num; }, $numbers); // $squares 现在是 [1, 4, 9, 16, 25]

2. array_reduce()

  • 功能array_reduce() 函数用于将数组元素通过回调函数进行归约,返回一个单一的值(标量),这个值是通过回调函数累积计算得到的。

  • 语法

    php
    array_reduce(array $array, callback $callback, mixed $initial = null)
    • $array:要处理的数组。
    • $callback:回调函数,接受累加器和当前数组元素作为参数,返回累加的结果。
    • $initial:可选,作为初始值使用的初始累加器。
  • 特点

    • 返回一个单一的值,而不是数组。
    • 回调函数中通过累加器逐个处理数组元素,直到计算完成。
    • 可以使用初始值来作为第一次调用回调函数时的累加器值。
  • 示例

    php
    $numbers = [1, 2, 3, 4, 5]; $sum = array_reduce($numbers, function($carry, $item) { return $carry + $item; }, 0); // $sum 现在是 15

区别总结

  • 返回值array_map() 返回一个新数组;array_reduce() 返回一个标量值。
  • 用途array_map() 用于对数组的每个元素应用函数;array_reduce() 用于将数组归约为单一值。
  • 参数array_map() 的回调函数接受每个数组元素;array_reduce() 的回调函数接受累加器和当前数组元素。

使用时需要根据具体需求选择合适的函数:如果需要处理数组的每个元素并生成新数组,则使用 array_map();如果需要将数组元素归约为单一值,则使用 array_reduce()