网站首页 文章专栏 array_filter、array_map、array_walk、array_walk_recursive 用法

array_filter、array_map、array_walk、array_walk_recursive 用法

编辑时间:2019-09-26 15:16:11 作者:苹果 浏览量:124





    前言:比起foreach这种直白的处理数组的方式,PHP自带的常用的四个遍历函数能解决大部分的遍历问题,大大精简了代码


//定义几个方法和数组,下面用

function mathpow ($num){
    if(!is_numeric($num)){
        return false;
    }
    return pow($num,2);
}
function mathadd ($a,$b){
    if(!is_numeric($a)||!is_numeric($b)){
        return false;
    }
    return $a+$b;
}
$arr=[1,2,3,4,'a'];
$arr_2=[5,6,'b','e','a'];



array_filter 用回调函数处理数组中的各个元素,
* 重点在于过滤(而不是新增)某个元素,并且保持了原来的索引

* 如果返回了false,那么这个元素将会被过滤掉。

        $new=array_filter($arr,'mathpow');    
        print_r($new);//过滤掉了a   Array Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )





array_map 用回调函数处理数组中的各个元素,
* 在函数中你可以改变各个元素的值,
* 重点在于你需要什么样的值就返回什么样的值,保持索引。
而且可以一次性处理多个数组。但是数组的数量应该与回调函数的参数保持一致


        $new=array_map('mathpow',$arr);    
        print_r($new);//数组中每个元素进行了运算  Array ( [0] => 1 [1] => 4 [2] => 9 [3] => 16 [4] => )
        $new=array_map('mathadd',$arr,$arr_2);
        print_r($new); //Array ( [0] => 6 [1] => 8 [2] => [3] => [4] =>)





*array_walk函数和array_map 功能一样呢,但是array_walk传的是引用而非值 用法同下面的array_walk_recursive一样,直接改变原数据
* array_map 函数势必比array_walk要更常用,因为php内置函数默认就是传的值而不是引用,那么你使用内置函数如:intval() strtolower()。。的时候walk就无能为力了


$arr_3=['a'=>11,'b'=>12,'c'=>13];

$new=array_walk($arr_3,'valpow');
        var_dump($new);
        print_r($arr_3);//Array ( [a] => 121 [b] => 144 [c] => 169 )



*array_walk_recursive常用于处理二维数组,可以拿到键值和键名

 特别注意,array_walk_recursive和array_walk 传的是地址

function valpow (&$v,$k){
            $v=pow($v,2);
        }
        $new=array_walk_recursive($arr_3,'valpow');
        var_dump($new);//true
        print_r($arr_3);//Array ( [a] => 14641 [b] => 20736 [c] => 28561 )



    出自:何冰华个人网站

    地址:http://www.hebinghua.com/

    转载请注明出处


来说两句吧
最新评论