PHP基础:数组回调函数的应用
1.array_filter():用回调函数过滤数组中的单元
array_filter(要处理的数组,回调函数(用于处理数组),默认只接收值/ARRAY_FILTER_USE_BOTH接收键和值/ARRAY_FILTER_USE_KEY只接收键)
echo 'array_filter():用回调函数过滤数组中的单元<br>';
// 1、array_filter(要处理的数组,回调函数(用于处理数组),默认只接收值/ARRAY_FILTER_USE_BOTH接收键和值/ARRAY_FILTER_USE_KEY只接收键)
$arr = ['html'=>60,'php'=>70,'js'=>80,'java'=>56,'css'=>45,'c++'=>0,null,false,[],'',0,'0'];
// php自动转为false的值: null, false, 空数组, 空字符串, 0, '0'
// 提示: 空对象不能转为false, 但是空数组是false
echo '1.过滤数组中小于60的值,仅保留大于等于60的值<br>';
// 方式一:代码量少,无法过滤空数组
// $res = array_filter($arr,function($item){
// return $item>=60;
// });
// 方式二:代码更严谨,可以过滤空数组
$res = array_filter($arr,function($item){
if($item>=60){
return $item;
}
});
printf('<pre>%s</pre>',print_r($res,true));
echo '2.过滤数组中的假值(null,false,空数组,空字符串, 0,"0"都会被转换为false假值)<br>';
$res = array_filter($arr);
printf('<pre>%s</pre>',print_r($res,true));
echo '<hr>';
2.array_map 为数组的每个元素应用回调函数
array_map(回调函数,要处理的数组)
echo 'array_map()为数组的每个元素应用回调函数<br>';
echo '1.为数组每个元素执行*2计算<br>';
$arr = [1,2,3,4,5];
$res=array_map(function($item){
return $item*2;
},$arr);
printf('<pre>%s</pre>',print_r($res,true));
// array_map(): 同时处理多个数组
echo '2.将两个数组的每个元素一一对应变成键值对<br>';
$key = ['html', 'css', 'js'];
$values = ['80', '78', '90'];
$res = array_map(function($value1, $value2) {
return [$value1 => $value2];
}, $key, $values);
printf('<pre>%s</pre><hr>', print_r($res, true));
echo '3.将多个数组的每个元素一一对应变成新数组<br>';
$id = ['101', '102', '103'];
$name = ['zhang', 'li', 'wang'];
$age = [30, 28, 35];
$res = array_map(null,$id,$name,$age);
printf('<pre>%s</pre>', print_r($res, true));
echo '<hr>';
3.array_reduce 用回调函数迭代地将数组简化为单一的值
array_reduce(要处理的函数,回调函数)
echo 'array_reduce()用回调函数迭代地将数组简化为单一的值<br>';
$arr=[['html'=>80],['css'=>78],['js'=>90]];
$res=array_reduce($arr, function($carry, $item){
// 获取当前元素的键
$key = key($item);
// 获取当前元素的值
$value = current($item);
// 拼装成键值对
$carry[$key] = $value;
return $carry;
});
printf('<pre>%s</pre>', print_r($res, true));
echo '<hr>';
4.array_walk 使用用户自定义函数对数组中的每个元素做回调处理
array_walk(数组, 回调函数,回调的第三个参数(默认值为null))
echo 'array_walk()使用用户自定义函数对数组中的每个元素做回调处理<br>';
// array_walk(数组, 回调函数,回调的第三个参数(默认值为null))
$arr=['html'=>80,'css'=>78,'js'=>90];
echo '1.不传第三个参数<br>';
array_walk($arr, function($value, $key) {
printf('[ %s ] => [ %s ] <br>',$key,$value);
});
echo '2.传第三个参数<br>';
array_walk($arr, function($value, $key,$userdata) {
printf('[ %s ] %s [ %s ] <br>',$key,$userdata,$value);
},'======>');