一. array_map
/**
* array_map函数势必比array_walk要更常用,
* 因为php内置函数默认就是传的值而不是引用,
* 那么你使用内置函数如:intval() strtolower()的时候walk就无能为力了.
* array_map 用回调函数处理数组中的各个元素,
* 在函数中你可以改变各个元素的值,
* 重点在你需要什么样的值就返回什么样的值,保持索引。
* 可以一次性处理多个数组。但是数组的数量应该与回调函数的参数保持一致
*/
$arr = array(
[
'name' => '张三丰',
'age' => '25',
'sex' => '男',
],
[
'name' => '孙二娘',
'age' => '22',
'sex' => '女',
],
);
$arr1 = array_map(function($val){
$value = $val;
$value['country'] = 'china';
return $value;
}, $arr);
print_r($arr1);
二. array_walk
/**
* 如果处理的数组不是二维,可以用array_map进行取代
* 处理二维数组用array_walk_recursive函数,
* 在处理一维数组时,array_walk函数因为是传引用,处理大数组时效率或许会比array_map高
* array_walk用回调函数处理数组中的各个元素,
* 此函数返回bool.所以需要配合引用传值直接改变原数组才有一定的功效。
*/
$arr = array(
[
'name' => '张三丰',
'age' => '25',
'sex' => '男',
],
[
'name' => '孙二娘',
'age' => '22',
'sex' => '女',
],
);
array_walk($arr, function(&$val, $key){
$val['country'] = strtoupper('china');
});
print_r($arr);
三. array_filter
/**
* array_filter 用回调函数处理数组中的各个元素,
* 重点在于过滤(而不是新增)某个元素,当你处理到一个元素时,
* 如果返回了false,那么这个元素将会被过滤掉
* 保持了原来的索引
* 注:空、false、0 都会被过滤
*/
$arr = [
'name' => '张三丰',
'age' => false,
'sex' => 0,
'country' => '',
];
$arr1 = array_filter($arr);
print_r($arr1);
四. array_reduce
/**
* array_reduce($arr,callable $callback)使用回调函数迭代地将数组简化为单一的值
* 其中$arr为输入数组,$callback($result,$value)接受两个参数,$result为上一次迭代产生的值,$value是当前迭代的值
* 使用array_reduce替代foreach循环最常用的一个业务场景也许就是数组求和或字符串拼接
*/
$arr = array(
array("id"=>1,'name'=>"a"),
array("id"=>2,"name"=>"c"),
array("id"=>3,"name"=>"d")
);
echo array_reduce($arr , function($result , $v){
Return $result.','.$v['id'];
});
五.