PHP学习笔记--array_map函数

作者: PeTu | 来源:发表于2016-06-03 17:57 被阅读1365次

    在这介绍一个PHP语言里比较常用的数组操作函数,array_map函数,当我第一次接触到这个函数时,对这个函数的强大功能所震慑,也越发感觉PHP语言的好玩之处。

    说明

    了解PHP函数的最好的去处就是PHP手册,PHP手册上的关于此函数的说明:

    array array_map ( callable $callback , array $arr1 [, array $... ] )

    array_map() 返回一个数组,该数组包含了 arr1 中的所有单元经过 callback 作用过之后的单元。callback 接受的参数数目应该和传递给 array_map() 函数的数组数目一致。
    就是说将$arr1数组的每个单元的值,通过回调函数作用后存储进一个新的数组作为新数组的对应单元的值
    而还有个厉害的地方是这个函数可以传入多个数组,也就是在你定义的回调函数中可以同时对多个数组的每个单元的值同时操作

    操作范例

    例子1:
    <?php    
    function cube($n){
        return $n*$n;
    }
    $num = array(1,2,3,4,5);
    var_dump(array_map("cube", $num));      
    输出:
    array(5) { [0]=> int(1) [1]=> int(4) [2]=> int(9) [3]=> int(16) [4]=> int(25) } 
    
    例子2(匿名函数也有效):
    <?php    
    $func = function($n,$m){
        return ("这个数组的第 $n 个位置的值是 $m <br>");
    };
    $a = array(1, 2, 3, 4, 5);
    $b = ['整型:1','整型:2','整型:3','整型:4','整型:5'];
    var_dump(array_map($func,$a,$b));
    输出:
    array(5) {
    [0]=> string(55) "这个数组的第 1 个位置的值是 整型:1 "
    [1]=> string(55) "这个数组的第 2 个位置的值是 整型:2 "
    [2]=> string(55) "这个数组的第 3 个位置的值是 整型:3 "
    [3]=> string(55) "这个数组的第 4 个位置的值是 整型:4 "
    [4]=> string(55) "这个数组的第 5 个位置的值是 整型:5 "
    }
    

    注意第二个例子中的匿名函数里的语句必须使用双引号,因为其中包含$n,$m两个传参,而在PHP中,双引号内的字符会被分析器进行一遍解析,这样才能将其中的参数代表的值解析出来。

    最后是从事数据开发时经常会碰到的问题,本人是在laravel框架下进行PHP开发,在利用其中的数据模型取数据时会出现一种情况,取出的数据是返回的对象类型(ObjClass),此时是无法直接利用键取出某一数据的,此时一般采用的方法是利用json_decode()方法,将其参数设为true时可返回数组类型的数据,但是此时返回的数组则是一个两层次的数组,就像

    $arr = array(
        0 => array(
            'id' => 11111
        ),
        1 => array(
            'id' => 22222
        ),
        2 => array(
            'id' => 33333
        )
    );
    

    此时可以用foreach取出id,但是也可以用array_map()方法

    $id_arr = array_map(function($v) {
        return $v['id'];
    }, $arr);
    输出:
    array(3) {
    [0]=> int(111) 
    [1]=> int(222) 
    [2]=> int(333) }
    

    不过foreach遍历数组也很快,这两种方法就是看个人意愿了

    相关文章

      网友评论

        本文标题:PHP学习笔记--array_map函数

        本文链接:https://www.haomeiwen.com/subject/vecldttx.html