php中array_filter,array_map,array_walk使用区别

首先是array_filter

function test($v) {
    if($v == 'red'){
        $v = 'red2';
        return true;
    } elseif($v == 'orange'){
        $v = 'orange2';
        return $v;
    } else {
        return false;
    }
}
$arr = ["a" => 'red', 'b' => 'orange', 'c' => 'blue'];
$arr2 = array_filter($arr,'test');
print_r($arr);
var_dump($arr2);

打印结果:

Array
(
    [a] => red
    [b] => orange
    [c] => blue
)

array(2) {
  'a' =>
  string(3) "red"
  'b' =>
  string(6) "orange"
}

 array_filter 只关心函数返回的结果是true还是false,来决定是否将元素放入新的数组中,不对原数组进行更改,不改变数组中元素的值

 

 

再来是array_map

function test($v,$v2) {
    if($v == 'red'){
        $v = 'red2';
        return true;
    } elseif($v == 'orange'){
        $v = 'orange2';
        $v = $v.'_vs_'.$v2;
        return $v;
    } else {
        return false;
    }
}
$arr = ["a" => 'red', 'b' => 'orange', 'c' => 'blue'];
$arr2 = array_map('test',$arr,$arr);
print_r($arr);
var_dump($arr2);

打印结果

Array
(
    [a] => red
    [b] => orange
    [c] => blue
)
array(3) {
  'a' =>
  bool(true)
  'b' =>
  string(9) "orange2_vs_orange"
  'c' =>
  bool(false)
}

array_map 取函数返回的结果,将结果放入新的数组中,不对原数组进行更改;array_map支持对多个数组进行操作,函数的参数与数组一一对应

 

最后是array_walk

function test(&$v,$v2,$p1) {
    if($v == 'red'){
        $v = 'red2';
        return true;
    } elseif($v == 'orange'){
        $v = 'orange2';
        $v = $v.'_vs_'.$v2.'_'.$p1;
        return $v;
    } else {
        return false;
    }
}
$arr = ["a" => 'red', 'b' => 'orange', 'c' => 'blue'];
$arr2 = array_walk($arr,'test','p1');
print_r($arr);
var_dump($arr2);

打印结果

Array
(
    [a] => red2
    [b] => orange2_vs_b_p1
    [c] => blue
)

bool(true)

array_walk  传引用前提下,在函数内对原数组元素进行赋值操作,结果返回true或false,函数支持两个参数,即原数组的value和key;非传引用的情况下 原数组值不变;支持自定义参数

 

总结:

1.如果需要对数组的元素进行过滤使用array_filter

2.如果需要对数组的元素进行修改又不想更改原数组使用array_map

3.如果需要在原数组上对元素进行修改使用array_walk,需要考虑键值的也可以使用array_walk

 

posted @ 2021-03-15 16:55  Ryuma  阅读(193)  评论(0)    收藏  举报