网站首页 文章专栏 array_filter、array_map、array_walk、array_walk_recursive 用法
//定义几个方法和数组,下面用 function mathpow ($num){ if(!is_numeric($num)){ return false; } return pow($num,2); } function mathadd ($a,$b){ if(!is_numeric($a)||!is_numeric($b)){ return false; } return $a+$b; } $arr=[1,2,3,4,'a']; $arr_2=[5,6,'b','e','a'];
array_filter 用回调函数处理数组中的各个元素,
* 重点在于过滤(而不是新增)某个元素,并且保持了原来的索引
* 如果返回了false,那么这个元素将会被过滤掉。
$new=array_filter($arr,'mathpow'); print_r($new);//过滤掉了a Array Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
array_map 用回调函数处理数组中的各个元素,
* 在函数中你可以改变各个元素的值,
* 重点在于你需要什么样的值就返回什么样的值,保持索引。
而且可以一次性处理多个数组。但是数组的数量应该与回调函数的参数保持一致
$new=array_map('mathpow',$arr); print_r($new);//数组中每个元素进行了运算 Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => ) $new=array_map('mathadd',$arr,$arr_2); print_r($new); //Array ( [0] => 6 [1] => 8 [2] => [3] => [4] =>)
*array_walk函数和array_map 功能一样呢,但是array_walk传的是引用而非值 用法同下面的array_walk_recursive一样,直接改变原数据
* array_map 函数势必比array_walk要更常用,因为php内置函数默认就是传的值而不是引用,那么你使用内置函数如:intval() strtolower()。。的时候walk就无能为力了
$arr_3=['a'=>11,'b'=>12,'c'=>13];
$new=array_walk($arr_3,'valpow'); var_dump($new); print_r($arr_3);//Array ( [a] => 121 [b] => 144 [c] => 169 )
*array_walk_recursive常用于处理二维数组,可以拿到键值和键名
特别注意,array_walk_recursive和array_walk 传的是地址
function valpow (&$v,$k){ $v=pow($v,2); } $new=array_walk_recursive($arr_3,'valpow'); var_dump($new);//true print_r($arr_3);//Array ( [a] => 14641 [b] => 20736 [c] => 28561 )
转载请注明出处