當前位置: 首頁> 最新文章列表> array_filter 和array_reduce 的區別與場景選擇

array_filter 和array_reduce 的區別與場景選擇

gitbox 2025-05-29

在PHP中, array_filterarray_reduce都是處理數組的強大函數,但它們的用途和工作方式有明顯區別。理解這兩個函數的差異和使用場景,有助於寫出更簡潔、高效的代碼。


1. array_filter 的作用

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不會改變元素的鍵名。


2. array_reduce 的作用

array_reduce用於將數組歸約成一個單一的值。它通過回調函數依次將數組元素合併到一個累積值中,適合做累加、求和、拼接字符串等操作。

代碼示例

<?php
$arr = [1, 2, 3, 4, 5];

// 計算數組所有元素的和
$sum = array_reduce($arr, function($carry, $item) {
    return $carry + $item;
}, 0);

echo $sum;
?>

輸出結果:

 15

$carry是累積值,回調會不斷更新它,最終返回的就是歸約結果。


3. 兩者的本質區別

特點array_filter array_reduce
作用過濾數組,返回滿足條件的子集將數組“縮減”為一個單一值
返回值一個數組一個標量或對象
主要用途條件篩選元素聚合、合併、累加
保留鍵名保留不涉及鍵名,關注值的累計

4. 根據場景如何選擇使用?

  • 需要從數組中篩選出符合條件的元素時,用array_filter 。比如:篩選出所有年齡大於18歲的用戶。

  • 需要將數組轉換成一個值時,用array_reduce 。比如:計算總分、拼接字符串、生成統計數據。


5. 結合示例

假設有一個訂單數組,裡麵包含多個訂單金額。

 <?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專注於歸約合併,將數組“壓縮”為一個結果。

  • 根據需求選擇,或者組合使用,能讓代碼更優雅和高效。