zoukankan      html  css  js  c++  java
  • 【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 对参数数组的元素进行过滤,返回新数组,不改变原数组的值。

  • 相关阅读:
    poj 3613(经过N条边的最短路)
    poj 3328(多起点多终点的最短路)
    poj 3311(floyd+状态压缩)
    新CCIE笔记-IP网络基础
    新CCIE笔记-IP网络基础
    算法之【冒泡排序法】
    算法之【冒泡排序法】
    算法之【冒泡排序法】
    算法之【辗转相除法】
    算法之【辗转相除法】
  • 原文地址:https://www.cnblogs.com/lhat/p/5882431.html
Copyright © 2011-2022 走看看