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"));