在PHP中, array_filter和array_reduce都是處理數組的強大函數,但它們的用途和工作方式有明顯區別。理解這兩個函數的差異和使用場景,有助於寫出更簡潔、高效的代碼。
array_filter用於過濾數組元素。它通過一個回調函數檢查每個元素,返回值為true的元素會被保留下來,返回false的元素會被移除。簡單來說,就是根據條件篩選出符合要求的數組元素。
<?php
$arr = [1, 2, 3, 4, 5, 6];
// 過濾出所有偶數
$result = array_filter($arr, function($value) {
return $value % 2 === 0;
});
print_r($result);
?>
輸出結果:
Array ( [1] => 2 [3] => 4 [5] => 6 )
注意: array_filter不會改變元素的鍵名。
array_reduce用於將數組歸約成一個單一的值。它通過回調函數依次將數組元素合併到一個累積值中,適合做累加、求和、拼接字符串等操作。
<?php
$arr = [1, 2, 3, 4, 5];
// 計算數組所有元素的和
$sum = array_reduce($arr, function($carry, $item) {
return $carry + $item;
}, 0);
echo $sum;
?>
輸出結果:
15
$carry是累積值,回調會不斷更新它,最終返回的就是歸約結果。
特點 | array_filter | array_reduce |
---|---|---|
作用 | 過濾數組,返回滿足條件的子集 | 將數組“縮減”為一個單一值 |
返回值 | 一個數組 | 一個標量或對象 |
主要用途 | 條件篩選元素 | 聚合、合併、累加 |
保留鍵名 | 保留 | 不涉及鍵名,關注值的累計 |
需要從數組中篩選出符合條件的元素時,用array_filter 。比如:篩選出所有年齡大於18歲的用戶。
需要將數組轉換成一個值時,用array_reduce 。比如:計算總分、拼接字符串、生成統計數據。
假設有一個訂單數組,裡麵包含多個訂單金額。
<?php
$orders = [120, 250, 90, 300, 60];
// 篩選出金額大於100的訂單
$filteredOrders = array_filter($orders, function($amount) {
return $amount > 100;
});
// 计算筛选后的訂單总金额
$total = array_reduce($filteredOrders, function($carry, $amount) {
return $carry + $amount;
}, 0);
echo "大於100的訂單总金额是:" . $total;
?>
通過上述示例,可以清晰地看到array_filter先篩選出符合條件的訂單,再用array_reduce進行求和。兩者配合使用,可以靈活處理數組數據。
array_filter專注於篩選元素,保留滿足條件的數組項。
array_reduce專注於歸約合併,將數組“壓縮”為一個結果。
根據需求選擇,或者組合使用,能讓代碼更優雅和高效。