array_walk、array_map、array_filter 的用法

array_walk、array_map、array_filter  和 foreach 都有循环对数组元素进行处理的功能。

 

一、array_walk 用法

 

1、循环数组,回调处理(并不修改数组元素的值,而是跳出去做其他的事情[回调的定义])

如:

$arr = [
    ['name' => 'A', 'age' => 18],
    ['name' => 'B', 'age' => 11],
];
 array_walk($arr, function ($value) {
     //做其他的逻辑处理,不对数组元素进行处理
     echo  "name:" . $value['name'] . ', age:' . $value['age'] . "\n";
 });

 

输出的结果:

name:A, age:18
name:B, age:11

 

2、循环数组,对数据的元素进行处理

如:

$arr = [
    ['name' => 'A', 'age' => 18],
    ['name' => 'B', 'age' => 11],
];

//使用引用
 array_walk($arr, function (&$value) {
    //修改元素的 age  值
    $value['age'] = $value['age'] - 1;
    
 });

print_r($arr);

输出结果:

Array
(
   [0] => Array
       (
           [name] => A
           [age] => 17
       )
   [1] => Array
       (
           [name] => B
           [age] => 10
       )
)

 

二、array_map 用法

array_map 的作用其实和array_walk 的引用差不多,就是循环数组,对数组元素的值进行处理;

 

三、array_filter 用回调函数过滤数组中的单元

通过 array_filter 处理过的数组,数字索引的数组会是不连续的,要通过 array_values()处理整理数组

 

 

function odd($var)
{
    // returns whether the input integer is odd
    return($var & 1);
}

function even($var)
{
    // returns whether the input integer is even
    return(!($var & 1));
}

$array1 = array("a"=>1, "b"=>2, "c"=>3, "d"=>4, "e"=>5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);

echo "Odd :\n";
print_r(array_filter($array1, "odd"));
echo "Even:\n";
print_r(array_filter($array2, "even"));

posted on 2019-12-20 11:02  追风的浪子  阅读(360)  评论(0编辑  收藏  举报

导航