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'] . " "; });
输出的结果:
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 : "; print_r(array_filter($array1, "odd")); echo "Even: "; print_r(array_filter($array2, "even"));