array_filter、array_map、array_walk三者用法

用法

  • array_filter() — 使用回调函数过滤数组的元素(重点在过滤)
  • array_map() - 为数组的每个元素应用回调函数(重点在遍历数组后,返回一个新数组)
  • array_walk() - 使用用户自定义函数对数组中的每个元素做回调处理(重点在对数组每个元素做操作)

区别

  • array_filter() 和 array_walk()对一个数组进行操作,数组在前,函数在后
  • array_map() 可以处理多个数组,因此函数在前,数组在后,可以根据实际情况放入多个数组参数

array_filter

array_filter — 使用回调函数过滤数组的元素(重点在过滤)

array_filter(array $array, ?callable $callback = null, int $mode = 0): array

https://www.php.net/manual/zh/function.array-filter.php

遍历 array 数组中的每个值,并将每个值传递给 callback 回调函数。 如果 callback 回调函数返回 true,则将 array 数组中的当前值返回到结果 array 数组中。

返回结果 array 数组的键名(下标)会维持不变,如果 array 参数是索引数组,返回的结果 array 数组键名(下标)可能会不连续。 可以使用 array_values() 函数对数组重新索引。

//$mode默认值为 0 ,只传递值作为 callback 回调的唯一参数。
array_filter($array, function ($v) {

});

//ARRAY_FILTER_USE_KEY - 将键名作为 callback 回调的唯一参数
array_filter($array, function ($k) {

}, ARRAY_FILTER_USE_KEY);

//ARRAY_FILTER_USE_BOTH - 将值和键都作为参数传递给 callback 回调
array_filter($array, function ($v, $k) {

}, ARRAY_FILTER_USE_BOTH);

array_walk

array_walk() - 使用用户自定义函数对数组中的每个元素做回调处理(重点在对数组每个元素做操作)

array_walk(array|object &$array, callable $callback, mixed $arg = null): bool

https://www.php.net/manual/zh/function.array-walk.php

//将用户自定义函数 callback 应用到 array 数组中的每个单元。
array_walk($array, function (&$v, $k) {

});

array_map

array_map() - 为数组的每个元素应用回调函数(重点在遍历数组后,返回一个新数组)

array_map(?callable $callback, array $array, array ...$arrays): array

https://www.php.net/manual/zh/function.array-map.php

array_map() 返回一个 array,包含将 array 的相应值作为回调的参数顺序调用 callback 后的结果(如果提供了更多数组,还会利用 arrays 传入)。callback 函数形参的数量必须匹配 array_map() 实参中数组的数量。多余的实参数组将会被忽略。如果提供的实参数组的数量不足,将抛出 ArgumentCountError。

$func = function(int $value): int {
    return $value * 2;
};

print_r(array_map($func, range(1, 5)));

// 或者从 PHP 7.4.0 起:

print_r(array_map(fn($value): int => $value * 2, range(1, 5)));

//返回:
Array
(
    [0] => 2
    [1] => 4
    [2] => 6
    [3] => 8
    [4] => 10
)
最后修改:2022 年 11 月 06 日 07 : 03 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论