php技术中数组递归处理函数array_map,array_walk,array_filter的区别整理。
三个方法的具体使用形式列举如下:
array_map(function($value){ // }, $array); array_walk($array, function($value, $key){ // }); array_filter($array, function($value){ // });
相同点:都是利用回调函数对数组中每个元素进行操作。
不同点:
返回值
回调函数的参数
是否改变数组的值
array_map 返回的是新数组,原数组不变(新数组和原数组的数组长度应该一样)。
array_walk 返回的布尔值,如果要改变数组元素的值,回调函数第一个参数必须是引用,如:
array_walk($array, function(&$v, $k){}); , arrary_walk 的回调函数还能够接收数组的key。
array_filter 返回的是新数组,原数组不变。它的作用是过滤数组中的元素。回调函数返回真,元素才能保存到新数组中,即(新数组和原数组的数组长度可能不一样)。
也可以理解为:
array_map 返回一个数组,该数组包含了输入数组中的所有单元经过回调函数作用过之后的单元,回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
array_walk 对参数数组的每个元素进行操作,返回布尔,改变原数组的值。
array_filter 返回的是一个数组,依次将输入数组中的每个值传递到回调函数。如果回调函数返回 TRUE,则输入数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。
使用示例:
$user_list = [1 => ['id' => 1, 'name' => '李小龙']]; $list = array_map(function ($item) { return $item['id']; }, $user_list); echo '<pre>';print_r($list); 返回的结果: Array ( [1] => 1 ) $user_list = [1 => ['id' => 1, 'name' => '李小龙']]; $result_list = [['uid' => 1, 'num' => 18]]; array_walk($result_list, function (&$item) use (&$user_list) { $item['name'] = isset($user_list[$item['uid']]) ? $user_list[$item['uid']]['name'] : ''; }); echo '<pre>';print_r($result_list); 返回的结果: Array ( [0] => Array ( [uid] => 1 [num] => 18 [name] => 李小龙 ) ) $user_list = [ 1 => ['id' => 1, 'name' => '李小龙'], 2 => ['id' => 2, 'name' => '李四'] ]; $list = array_filter($user_list, function ($item) { return $item['id'] == 2; }); echo '<pre>';print_r($list); 返回的结果: Array ( [2] => Array ( [id] => 2 [name] => 李四 ) )