PHPでは、 array_filter()とarray_reduce()関数は、それぞれアレイをフィルタリングおよび集約するために使用される非常に便利なツールです。開発者がコードを簡素化し、コードの読みやすさと効率を向上させるのに役立ちます。この記事では、例を使用して、これら2つの機能をデータフィルタリングと集約に使用する方法を示します。
array_filter()関数は、配列内の要素をフィルタリングするために使用されます。パラメーターとして配列とコールバック関数を受信します。コールバック関数は、配列内の各要素を判断します。コールバック関数がtrueを返す場合、要素は結果配列に残ります。 falseが返されると、要素が除外されます。
array_filter(array $array, callable $callback = null, int $mode = 0): array
$配列:フィルタリングする必要がある配列。
$ callback :コールバック関数。関数がtrueを返す場合、要素は保持されます。 falseが返されると、要素が削除されます。コールバック関数が渡されない場合、配列内のすべてのfalse値( null 、 false 、 0 、 ''など)が削除されます。
$モード:オプション、アレイを返すインデックスメソッドを指定します。デフォルト値は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
$配列:集約する必要がある配列。
$ callback :累積値と現在の配列要素の値の2つのパラメーターを受信するコールバック関数。コールバック関数の返品値は、次の反復の蓄積値として使用されます。
$ 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は蓄積された値を表し、 $値は現在の配列要素の値を表します。
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);
?>
出力: