當前位置: 首頁> 最新文章列表> 如何使用array_filter() 和array_reduce() 函數進行數據篩選與聚合?

如何使用array_filter() 和array_reduce() 函數進行數據篩選與聚合?

M66 2025-06-04

在PHP中, array_filter()array_reduce()函數是非常有用的工具,分別用於對數組進行篩选和聚合操作。它們可以幫助開發者簡化代碼,提高代碼的可讀性和效率。本文將通過示例演示如何使用這兩個函數來進行數據篩選與聚合。

1. array_filter()函數簡介

array_filter()函數用於篩選數組中的元素。它接收一個數組和一個回調函數作為參數。回調函數對數組中的每個元素進行判斷,若回調函數返回true ,則該元素保留在結果數組中;若返回false ,則該元素被過濾掉。

文法:

 array_filter(array $array, callable $callback = null, int $mode = 0): array
  • $array :需要進行篩選的數組。

  • $callback :回調函數,若該函數返回true ,則保留該元素;若返回false ,則移除該元素。如果不傳入回調函數,則會移除數組中的所有假值(例如nullfalse0''等)。

  • $mode :可選,指定返回數組的索引方式,默認值為0 ,即保留原索引。

示例:

假設我們有一個包含一些數字的數組,想要篩選出所有大於10的數字。

 <?php
$array = [1, 5, 8, 12, 15, 2];

$result = array_filter($array, function($value) {
    return $value > 10;
});

print_r($result);
?>

輸出:

 Array
(
    [3] => 12
    [4] => 15
)

在上述代碼中,我們使用了array_filter()函數來篩選出大於10 的數字。可以看到,返回的數組只包含符合條件的元素。

2. array_reduce()函數簡介

array_reduce()函數用於將數組簡化為單一的值。它通過一個回調函數對數組中的每個元素進行操作,並將結果聚合成一個單一的返回值。常見的應用場景包括求和、計算平均值、拼接字符串等。

文法:

 array_reduce(array $array, callable $callback, $initial = null): mixed
  • $array :需要進行聚合的數組。

  • $callback :回調函數,接收兩個參數:累積的值和當前數組元素的值。回調函數的返回值將作為下次迭代的累積值。

  • $initial :可選,初始值,默認為null

示例:

我們有一個包含數字的數組,想要計算數組中所有元素的總和。

 <?php
$array = [1, 5, 8, 12, 15, 2];

$sum = array_reduce($array, function($carry, $value) {
    return $carry + $value;
}, 0);

echo $sum;
?>

輸出:

 43

在上述代碼中, array_reduce()函數將數組中的每個元素依次相加,最終返回數組的總和。這裡的$carry代表累積值,而$value代表當前數組元素的值。

3. 綜合應用:數據篩選與聚合

我們可以結合使用array_filter()array_reduce()來對數組數據進行篩選並進行聚合操作。假設我們有一個包含多個產品價格的數組,想要篩選出價格大於10 的產品,併計算它們的總和。

 <?php
$products = [
    ['name' => 'Product 1', 'price' => 5],
    ['name' => 'Product 2', 'price' => 15],
    ['name' => 'Product 3', 'price' => 8],
    ['name' => 'Product 4', 'price' => 20],
];

// 使用 array_filter 篩選出價格大於10的產品
$filteredProducts = array_filter($products, function($product) {
    return $product['price'] > 10;
});

// 使用 array_reduce 計算篩選後產品的總價格
$totalPrice = array_reduce($filteredProducts, function($carry, $product) {
    return $carry + $product['price'];
}, 0);

echo "Total Price: " . $totalPrice;
?>

輸出:

 Total Price: 35

在這個例子中,我們先使用array_filter()篩選出價格大於10的產品,然後使用array_reduce()計算這些篩選後的產品價格總和。

4. 替換URL 域名示例

假設我們有一個包含一些URL的數組,並且需要將其中的域名替換為m66.net ,我們可以使用array_map()和正則表達式來實現這一操作。

 <?php
$urls = [
    'http://example.com/page1',
    'https://www.example.com/page2',
    'http://example.com/page3'
];

$updatedUrls = array_map(function($url) {
    return preg_replace('/https?:\/\/[^\/]+/', 'https://m66.net', $url);
}, $urls);

print_r($updatedUrls);
?>

輸出: