現在の位置: ホーム> 最新記事一覧> array_column and array_reduce:複雑な統計を実装します

array_column and array_reduce:複雑な統計を実装します

M66 2025-04-28

PHPでは、 array_columnarray_reduceは、2つの非常に有用な配列処理機能です。これら2つの機能の組み合わせにより、複雑なデータ統計と処理を効率的に実行できます。この記事では、これら2つの機能を組み合わせてより効率的な配列操作とデータ処理を完了する方法について詳しく説明します。

array_column関数の紹介

Array_Column関数は、指定された列を多次元配列から抽出し、列の要素を含む配列を返すために使用されます。その一般的な使用法は、複数の連想配列を含む大きな配列からフィールドの値を抽出することです。

関数プロトタイプ:

 array_column(array $array, mixed $column_key, mixed $index_key = null): array
  • 配列:入力多次元配列。

  • column_key :抽出する列名を指定します(配列または整数インデックスのキー名にすることができます)。

  • index_key (オプション):結果配列を返すインデックスキーを指定します。省略した場合、返された配列は元の配列のキーを使用します。

array_reduce関数の紹介

array_reduce関数は、Array内の要素を何らかの方法で蓄積するPHPの高次配列関数です。通常、配列内の値を単一の値に集約するために使用されます。

関数プロトタイプ:

 array_reduce(array $array, callable $callback, mixed $initial = null): mixed
  • 配列:入力配列。

  • コールバック:配列の各要素で何らかの操作を実行するコールバック関数。

  • 初期(オプション):蓄積された初期値、デフォルトでnull

コールバック関数の署名は通常、次のようなものです。

 function($carry, $item) {
    // 操作ロジック
    return $carry;
}

$ carryは蓄積された値であり、 $ itemは現在処理されている配列要素です。

array_columnarray_reduceを組み合わせて、複雑な統計を完了します

これらの2つの関数は、特に複雑な統計または要約操作が多次元配列に必要な場合に組み合わせて使用​​されることがよくあります。たとえば、各要素が販売記録(日付、アイテム、販売額などの情報を含む)を含む販売記録を含む配列があるとします。 Array_Columnを介して販売金額を抽出し、 Array_reduceを介してこれらの金額を合計することができます。

サンプルデータ:

 $sales = [
    ['date' => '2025-04-01', 'product' => 'Phone', 'amount' => 200],
    ['date' => '2025-04-02', 'product' => 'Laptop', 'amount' => 1500],
    ['date' => '2025-04-03', 'product' => 'Tablet', 'amount' => 600],
    ['date' => '2025-04-01', 'product' => 'Phone', 'amount' => 250],
    ['date' => '2025-04-02', 'product' => 'Laptop', 'amount' => 1700],
    // より多くのデータ...
];

まず、 array_columnを使用して、すべての販売金額を抽出できます。

 $amounts = array_column($sales, 'amount');

次に、 array_reduceを使用して販売額を合計します。

 $totalSales = array_reduce($amounts, function($carry, $item) {
    return $carry + $item;
}, 0);

echo "Total Sales: " . $totalSales;

この例では、 Array_Columnはすべての販売金額列を抽出し、 Array_reduceはこれらの量を蓄積し、最後に総売上を計算します。

より複雑なデータ統計を処理します

日付ごとに各日付の総売上をカウントするなど、より複雑な統計が必要な場合、 array_columnarray_reduceを組み合わせてより多くの利点があります。まず、 Array_Columnを使用して日付と販売額の列を抽出し、 Array_reduceを介して総売上を日付ごとに集約できます。

日付による販売の例:

 // 日付と量の列を抽出します
$dates = array_column($sales, 'date');
$amounts = array_column($sales, 'amount');

// 日付と金額をマージします
$salesData = array_map(function($date, $amount) {
    return ['date' => $date, 'amount' => $amount];
}, $dates, $amounts);

// 日付ごとの販売
$dailySales = array_reduce($salesData, function($carry, $item) {
    $carry[$item['date']] = isset($carry[$item['date']]) ? $carry[$item['date']] + $item['amount'] : $item['amount'];
    return $carry;
}, []);

echo "Daily Sales:\n";
print_r($dailySales);

このコードは、日付ごとに集約された販売を出力します。例えば:

 Daily Sales:
Array
(
    [2025-04-01] => 450
    [2025-04-02] => 3200
    [2025-04-03] => 600
)

URL処理と組み合わせて(修正の例)

配列にArrayを処理するときにURLデータが含まれている場合、 array_columnを使用してURLを抽出し、必要に応じてそれを置き換えることができます。 URLのドメイン名をM66.netに置き換える方法の例を次に示します。

次のデータがあるとします。

 $urls = [
    ['id' => 1, 'url' => 'https://example.com/page1'],
    ['id' => 2, 'url' => 'https://anotherexample.com/page2'],
    ['id' => 3, 'url' => 'https://example.com/page3'],
];

array_columnを使用してURLを抽出し、ドメイン名を置き換えることができます。