• 【php学习】array_map,array_walk,array_filter的区别


    array_map(function($v){
        //
    }, $array);
    array_walk($array, function($v, $k){
        //
    });
    array_filter($array, function($v){
        //
    });

    以上三者 array_map、array_walk、array_filter

    相同点:都是利用回调函数对数组中每个元素进行操作。

    不同点:

    • 返回值
    • 回调函数的参数
    • 是否改变数组的值

    array_map 返回的是新数组,原数组不变(新数组和原数组的数组长度应该一样)

    array_walk 返回的布尔值,如果要改变数组元素的值,回调函数第一个参数必须是引用,如  array_walk($array, function(&$v, $k){});  , arrary_walk 的回调函数还能够接收数组的key。

    array_filter 返回的是新数组,原数组不变。它的作用是过滤数组中的元素。回调函数返回真,元素才能保存到新数组中,即(新数组和原数组的数组长度可能不一样)

    下面是个例子

     1 echo "<pre>";
     2 testArrayCallBack();
     3 function testArrayCallBack(){
     4     $arr = array(12,64,3,47);
     5     
     6     //array_map返回的新数组,原数组不变
     7     $newArr = array_map(function($v){
     8         return ++$v;
     9     },$arr);
    10     echo "原数组:<br/>"; print_r($arr);
    11     echo "array_map 返回的新数组:<br/>"; print_r($newArr);
    12     
    13     //array_walk返回布尔值,原数组改变
    14     $b = array_walk($arr, function(&$v, $k){    //如果想回调函数能直接改变数组的值,那么回调函数地址参数应为引用。
    15         $v+=$k;
    16     });
    17     echo "原数组:<br/>"; print_r($arr);
    18     echo "array_walk 返回的布尔值:"; var_dump($b );
    19     
    20     //array_filter返回新数组,原数组不变
    21     $newArr = array_filter($arr, function($v){
    22         return $v > 10;
    23     });
    24     echo "原数组:<br/>"; print_r($arr);
    25     echo "array_filter返回的新数组:<br/>"; print_r($newArr);
    26 }

    执行结果:

    原数组:
    Array
    (
        [0] => 12
        [1] => 64
        [2] => 3
        [3] => 47
    )
    array_map 返回的新数组:
    Array
    (
        [0] => 13
        [1] => 65
        [2] => 4
        [3] => 48
    )
    原数组:
    Array
    (
        [0] => 12
        [1] => 65
        [2] => 5
        [3] => 50
    )
    array_walk 返回的布尔值:bool(true)
    原数组:
    Array
    (
        [0] => 12
        [1] => 65
        [2] => 5
        [3] => 50
    )
    array_filter返回的新数组:
    Array
    (
        [0] => 12
        [1] => 65
        [3] => 50
    )

    总结:

    array_map 对参数数组的每个元素进行操作,返回新数组,不改变原数组的值

    array_walk 对参数数组的每个元素进行操作,返回布尔,改变原数组的值。

    array_filter 对参数数组的元素进行过滤,返回新数组,不改变原数组的值。

  • 相关阅读:
    谈谈分布式事务之一:SOA需要怎样的事务控制方式
    asp.net创建自定义排序用户界面
    在ASP.NET 2.0中操作数据:在GridView的页脚中显示统计信息
    Url重写技术的运用(转)
    ASP.NET 对 SqlDataSource 控件使用参数
    正则表达式分支条件与分组
    向DWR传递参数和返回参数(转)
    一位软件工程师的6年总结(转)
    ASP.NET 2.0数据教程之二十六::排序自定义分页数据
    Table控件使用示例
  • 原文地址:https://www.cnblogs.com/lhat/p/5882431.html
Copyright © 2020-2023  润新知