开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1060|回复: 0
收起左侧

[PHP相关教程] PHP- 四个数组回调函数

[复制链接]
发表于 2020-7-16 11:56:29 | 显示全部楼层 |阅读模式   山东省德州市

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

  • 把输入数组中的每个键值传给回调函数,如果返回 true 则存入另一个数组中,数组键名保持不变
## array_filter
// 返回数组中后缀名为.jpg 的图片
$image = ['web.png','name.gif','item.jpg','kk.pgf','vv.jpg'];
$image = array_filter($image,function($arr){
    return  pathinfo($arr)['extension'] === 'jpg';
});
print_r($image);
// 输出  Array ( [2] => item.jpg [4] => vv.jpg )
// 索引进行重排
sort($image);
print_r($image);
// 输出 Array ( [0] => item.jpg [1] => vv.jpg )

2 arrtay_map 为数组的每个元素应用回调函数进行处理,返回新数组

  • 该函数将用户自定义函数作用到数组中的每个值上,并返回用户自定义函数作用后的带有新值的数组。
  • 可以传递多个数组,回调函数接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
## array_map
// 将数组进行拉平
$res = [[1,2,3],1,2,(new class{public $name='中国'; public $gps='亚洲';})];
// printf('<pre>%s</pre>',print_r($res,true));
$arr = array_map(function($item){
switch (gettype($item)) {
    case 'object':
        $item = get_object_vars($item);
        case 'array':
        $item =implode(',',$item);

}
return $item;
},$res);

printf('<pre>%s</pre>',print_r($arr,true));
// 输出 Array
// (
//     [0] => 1,2,3
//     [1] => 1
//     [2] => 2
//     [3] => 中国,亚洲
// )

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

// array_walk()
$res =['id'=>'101','name'=>'machael','age'=>'15'];
array_walk($res,function($item,$key){
 echo $key .' = '.$item .'<br>';
});

// 输出
// id = 101
// name = machael
// age = 15

4 array_reduce 发送数组中的值到用户自定义函数,并返回一个字符串

## array_reduce

$arr = null;
$arr[] = ['id'=>'101','name'=>'machael','age'=>'15'];
$arr[] = ['id'=>'102','name'=>'mach','age'=>'16'];
$arr[] = ['id'=>'103','name'=>'maael','age'=>'18'];
// printf('<pre>%s</pre>',print_r($arr,true))
// 获取当期二维数组中每个id的值
$arr = array_reduce($arr,function($res,$item){
return $res.','.$item['id'];
});
printf('<pre>%s</pre>',print_r($arr,true));
//输出结果  ,101,102,103

// 求和
$num = [1,2,3,4];
$sum = array_reduce($num,function($a,$b){
    return $a + $b;
});
printf('<pre>%s</pre>',print_r($sum,true));
// 输出结果 10

// 合并两个数组
$a = ['name','id','password'];
$b = ['machiel','101','123456'];
// 合并
$res = array_map(function($arr_a,$arr_b){
    return [$arr_a => $arr_b];
},$a,$b);
// 二维转一维
$res = array_reduce($res,function($arr,$item){
    $key = key($item);
    $current = current($item);
    $arr[$key] = $current;
    return $arr;
});

printf('<pre>%s</pre>',print_r($res,true));
// 输出 Array
// (
//     [name] => machiel
//     [id] => 101
//     [password] => 123456
// )
您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 诚聘英才| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 800073686,邮箱:800073686@b.qq.com
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表