ホームページ > バックエンド開発 > PHPチュートリアル > 2D 配列内の行を列ごとにグループ化し、別の列を合計するにはどうすればよいですか?

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

Patricia Arquette
リリース: 2024-11-10 08:10:02
オリジナル
836 人が閲覧しました

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

2D 配列行データを列ごとにグループ化し、別の列を合計する

表形式データを分析する場合、共有データに基づいて行を統合することが必要になることがよくあります。他の列で計算を実行しながら、特定の列の値を計算できます。 2D 配列の行をグループ化し、別の列の値を合計するという課題に挑戦してください。

問題文:

各行がデータ エントリを表す 2D 配列が与えられます。 。目標は、指定したグループ化列 (「dd」など) によってこれらの行をグループ化し、各グループ内の別の列 (「数量」など) の値を合計することです。結果は、一意のグループ化値と対応する合計列値を含む縮小 2D 配列になります。

例:

Input:
[
    ['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'],
];

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

解決策:

この問題に取り組むには、次の手順に従います。

  1. 各行を反復処理します。 入力 2D 配列を行ごとにスキャンします。
  2. 既存のグループを確認します: 現在の行のグループ化値 ('dd') のグループが出力配列にすでに存在するかどうかを確認します。
  3. 必要に応じて新しいグループを作成します: 現在の行のグループ化値に対応するグループが存在しない場合は、グループ化値と初期「数量」値 0 を使用して出力配列に新しいエントリを作成します。
  4. 数量の累積: 増分現在の行の「数量」値による、既存または新しく作成されたグループの「数量」値。
  5. 最終配列の抽出: 出力配列を数値インデックス付き形式に変換して、一致するようにします。

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 を生成します。配列を目的の結果として返します。

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

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