array_map(callback,array) 我稱之為陣列更新,表示對陣列的每一項進行callback運算後返回一個新陣列.
array_walk(array,callback) 我稱之為資料遍歷,表示對陣列每一項進行callback處理,沒有返回.
array_reduce(array,callback) 稱之為資料核算,表示對陣列每一項進行callback處理合併並返回為一個值
array_filter(array,callback) 稱之為陣列過濾,表示對陣列每一項進行callback處理,return true的值保留在原陣列.
array_walk/array_filter/array_map/array_reduce
遍歷陣列, 回撥函式, 遍歷一次, 回撥一次
array_walk相當於foreach
$arr = ['client'=>'js','cerver'=>'go'];
array_walk($arr,'walk' );
function walk($v, $k) {
echo "鍵:$k 值:$v\n";
}
比如去除陣列$arr元素的前後空白
array_walk($arr, function(&$v) { $v = trim($v); });
foreach($arr as &$v) { $v = trim($v); }
array_filter用回撥函式過濾陣列中的單元,返回過濾後的陣列
var_export(
array_filter([1, 2, 3,4], function($v) {
return $v > 1;
})
);
和
foreach([1, 2, 3,4] as $k => $v) {
if($v > 1) {
$tmp[$k] = $v;
}
}
var_export($tmp);
都輸出:
array (
1 => 2,
2 => 3,
3 => 4,
)
PHP陣列對映化簡(MapReduce)
array_map/array_reduce
array_map: 將回撥函式作用到給定陣列的單元上
var_export(
array_map(function ($v) {
return $v * $v;
}, [1, 2, 3,4])
);
和
foreach([1, 2, 3,4] as $v) {
$tmp[] = $v * $v;
}
var_export($tmp);
都輸出:
array (
0 => 1,
1 => 4,
2 => 9,
3 => 16,
)
array_reduce 用回撥函式迭代地將陣列簡化(reduce)為單一的值
陣列值累加可使用array_reduce函式
//輸出16,即10+1+2+3,其中10作為初始值
//輸出10,即0+1+2+3,其中0作為初始值
echo array_reduce([1, 2, 3], function($result, $item) {
$result = $result + $item;
return $result;
}, 0);
用foreach表達
$result = 10;
foreach([1, 2, 3] as $v) {
$result = $result + $v;
}
echo $result;
本作品採用《CC 協議》,轉載必須註明作者和本文連結