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
浙公网安备 33010602011771号