特定の列で行をグループ化し、2D 配列内の別の列を合計するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-11-17 02:33:03
オリジナル
644 人が閲覧しました

How to Group Rows by a Specific Column and Sum Another Column in a 2D Array?

2D 配列内のデータのグループ化と列の合計

データ処理シナリオでは、2D 配列の行をグループ化する必要が生じる場合があります。指定された列に基づいて、各列内の別の列に値を累積します。 group.

問題ステートメント:

以下に示すような入力配列が与えられたとします:

[
    ['quantity' => 5,  'dd' => '01-Nov-2012'],
    ['quantity' => 10, 'dd' => '01-Nov-2012'],
    ['quantity' => 3,  'dd' => '02-Nov-2012'],
    ['quantity' => 4,  'dd' => '03-Nov-2012'],
    ['quantity' => 15, 'dd' => '03-Nov-2012'],
]
ログイン後にコピー

行をグループ化したいとします。 「dd」列を作成し、各グループ内の「数量」値を合計します。期待される出力は次のとおりです:

[
    ['quantity' => 15, 'dd' => '01-Nov-2012'],
    ['quantity' => 3,  'dd' => '02-Nov-2012'],
    ['quantity' => 19, 'dd' => '03-Nov-2012'],
]
ログイン後にコピー

解決策:

これを実現するには、単純なループ メカニズムを使用します。最初の行から始めて、「dd」値が出力配列にすでに存在するかどうかを確認します。そうでない場合は、その 'dd' の新しいエントリを作成し、'quantity' を 0 に初期化します。

次に、行ごとに、出力配列内の対応するグループに 'quantity' を追加します。すべての行が処理されるまで、このプロセスを繰り返します。最後に、array_values() を使用して出力配列を数値インデックスに変換します。

次の PHP コードは、解決策を示しています。

$in = array(array()); // your input
$out = array();
foreach ($in as $row) {
    if (!isset($out[$row['dd']])) {
        $out[$row['dd']] = array(
            'dd' => $row['dd'],
            'quantity' => 0,
        );
    }
    $out[$row['dd']]['quantity'] += $row['quantity'];
}
$out = array_values($out); // make the out array numerically indexed
var_dump($out);
ログイン後にコピー

以上が特定の列で行をグループ化し、2D 配列内の別の列を合計するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート