• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

【转】php之array_filter、array_walk、array_map的区别

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

原文:https://blog.csdn.net/csdnzhangyiwei/article/details/60761512


 

array array_filter ( array $input [, callback $callback ] )
array array_map ( callback $callback , array $arr1 [, array $... ] )
bool array_walk ( array &$array , callback $funcname [, mixed $userdata ] )

详细说明:

array_filter返回的是一个数组,依次将 input 数组中的每个值传递到 callback 函数。如果 callback 函数返回 TRUE,则 input数组的当前值会被包含在返回的结果数组中。数组的键名保留不变。

$arr=array(1,2,3,4,5,6);

function filter($var){
    if($var%2==0)
        return true;
}
$data=array_filter($arr,"filter");
$data=array(2,4,6);

 

array_map() 返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元。callback接受的参数数目应该和传递给 array_map() 函数的数组数目一致。 

$arr1=array('linux','Php','JAVA');
array_map('strtoupper',$arr1);

 

array_walk() 不会受到 array内部数组指针的影响。array_walk()会遍历整个数组而不管指针的位置。

用户不应在回调函数中改变该数组本身。例如增加/删除单元,unset 单元等等。如果 array_walk()作用的数组改变了,则此函数的的行为未经定义,且不可预期。注意回调函数接收的前两个参数第一个是值,第二个是键值,如果有第三个参数,则数组所有的值都共用这个参数。

function exchange($val,$key)
{
    echo $val;
    echo $key;
    
}
$arr2=array('a'=>'linux','b'=>'php','c'=>'java','d'=>'mysql');
array_walk($arr2,'exchange');

示例二,将数组里的值变为大写,array_map()才是最佳选择,array_walk()和array_filter()不适合这种场景:

//使用array_map()函数
$arr = array('linux','Php','JAVA');
$map_arr = array_map('strtoupper',$arr);
var_dump($arr);
var_dump($map_arr);


//使用array_walk()函数
$walk_arr = [];
function FunctionNames($val,$key)
{
    $GLOBALS['walk_arr'][$key] = strtoupper($val);
}

array_walk($arr,'FunctionNames');//函数返回值为bool true|false
var_dump($arr);
var_dump($walk_arr);

//使用array_filter()函数
$walk_arr =[];
array_filter($arr,'FunctionNames',ARRAY_FILTER_USE_BOTH);
var_dump($arr);
var_dump($walk_arr);

总结:

map的第一个参数是函数,第二个是数组,而walk和filter的第一个参数是数组,第二个才是函数。

map 主要是为了得到你的回调函数处理后的新数组,要的是结果。
walk 主要是对每个参数都使用一次你的回调函数,要的是处理的过程。
walk 可以认为提供额外参数给回调函数,map不可以
walk 主要是要对数组内的每个值进行操作,操作结果影响原来的数组
map 主要是对数组中的值进行操作后返回数组,以得到一个新数组
walk 可以没有返回值 map要有,因为要填充数组
filter 如果函数返回值为true则返回数组的值,false不返回值,适合过滤的场景。


 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
php常用字符串函数大全发布时间:2022-07-10
下一篇:
PHPMailer类-php发送邮件好帮手发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap