在PHP中, array_filter()和array_reduce()函數是非常有用的工具,分別用於對數組進行篩选和聚合操作。它們可以幫助開發者簡化代碼,提高代碼的可讀性和效率。本文將通過示例演示如何使用這兩個函數來進行數據篩選與聚合。
array_filter()函數用於篩選數組中的元素。它接收一個數組和一個回調函數作為參數。回調函數對數組中的每個元素進行判斷,若回調函數返回true ,則該元素保留在結果數組中;若返回false ,則該元素被過濾掉。
array_filter(array $array, callable $callback = null, int $mode = 0): array
$array :需要進行篩選的數組。
$callback :回調函數,若該函數返回true ,則保留該元素;若返回false ,則移除該元素。如果不傳入回調函數,則會移除數組中的所有假值(例如null 、 false 、 0 、 ''等)。
$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 的數字。可以看到,返回的數組只包含符合條件的元素。
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代表當前數組元素的值。
我們可以結合使用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()計算這些篩選後的產品價格總和。
假設我們有一個包含一些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);
?>
輸出:
相關標籤:
array_filter