1.array_filter

用回调函数过滤数组中的单元

  1. array_filter( array $array [, callable $callback [, int $flag = 0 ]] )
  1. //用法一(过滤等值为false的元素):
  2. $arr = [0, 1, 2, false, '', null, "0"];
  3. $arr = array_filter($arr);
  4. print_r($arr); // Array ( [1] => 1 [2] => 2 )
  5. //用法二(按照回调函数设置的规则进行过滤):
  6. $arr = [0, 1, 2, false, '', null, "0"];
  7. $arr = array_filter($arr, function ($val) {
  8. if ($val === 0 || $val != false) {
  9. return true;
  10. } else {
  11. false;
  12. }
  13. });
  14. print_r($arr); // Array ( [0] => 0 [1] => 1 [2] => 2 )

2.array_map

为数组的每个元素应用回调函数

  1. array_map(myfunction,array1,array2,array3...)

该函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。
可以传递多个数组,回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。

  1. $arr1 = [1,2,3,4,5];
  2. $arr2 = [6,7,8,9,10];
  3. //函数写前面,数组参数写后面
  4. $new_arr = array_map(function($val1,$val2){
  5. return $val1 + $val2;
  6. },$arr1,$arr2);
  7. var_dump($new_arr);
  8. //返回结果
  9. //array (size=5)
  10. // 0 => int 7
  11. // 1 => int 9
  12. // 2 => int 11
  13. // 3 => int 13
  14. // 4 => int 15

3.array_walk

使用用户自定义函数对数组中的每个元素做回调处理

  1. array_walk(array,myfunction,parameter...)
  1. //将数组中的元素用于某种操作
  2. $arr = ['a','b','c'];
  3. array_walk($arr,function($val,$key){
  4. echo "{$key} is {$val} <br/>";
  5. });
  6. //返回结果
  7. //0 is a
  8. //1 is b
  9. //2 is c
  10. //改变数组中的值,传参的时候使用引用
  11. array_walk($arr,function(&$val,$key){
  12. $val .= $val;
  13. });
  14. var_dump($arr);
  15. //array (size=3)
  16. // 0 => string 'aa' (length=2)
  17. // 1 => string 'bb' (length=2)
  18. // 2 => string 'cc' (length=2)

总结

  • array_filter() 重点在于过滤(而不是新增)某个元素,当你处理到一个元素时,返回过滤后的数组
  • array_map() 重点在于遍历一个数组或多个数组的元素,返回一个新的数组
  • array_walk() 重点在于遍历数组进行某种操作
  • array_filter() 和 array_walk()对一个数组进行操作,数组参数在前,函数参数在后
  • array_map() 可以处理多个数组,因此函数参数在前,数组参数在后,可以根据实际情况放入多个数组参数