ホームページ > バックエンド開発 > PHPチュートリアル > PHP で多次元配列データを複数の列でグループ化し、値を集計するにはどうすればよいですか?

PHP で多次元配列データを複数の列でグループ化し、値を集計するにはどうすればよいですか?

Susan Sarandon
リリース: 2024-11-07 03:53:02
オリジナル
325 人が閲覧しました

How do I Group Multidimensional Array Data by Multiple Columns and Aggregate Values in PHP?

複数の列による多次元配列データのグループ化と値の集計

問題ステートメント:

あなた2 つの別々のデータベース クエリからのデータを結合する多次元配列があります。配列は、「部品」、「アドレス」、「タイプ」、および「カウント」を含む属性を持つレコードで構成されます。目標は、「part」値と「type」値に基づいて配列要素をグループ化し、各グループ内の「count」値の合計を計算することです。

入力例:

<code class="php">$arr1 = [
    ['part' => '1', 'address' => 'aaa', 'type' => '1', 'count' => 5],
    ['part' => '1', 'address' => 'bbb', 'type' => '1', 'count' => 5],
    ['part' => '1', 'address' => 'ccc', 'type' => '1', 'count' => 5],
    ['part' => '2', 'address' => 'aaa', 'type' => '1', 'count' => 5],
    ['part' => '2', 'address' => 'bbb', 'type' => '1', 'count' => 5],
    ['part' => '2', 'address' => 'ccc', 'type' => '2', 'count' => 5]
];</code>
ログイン後にコピー

期待される出力:

<code class="php">$arr2 = [
    ['part' => '1', 'type' => '1', 'count' => 15],
    ['part' => '2', 'type' => '1', 'count' => 10],
    ['part' => '2', 'type' => '2', 'count' => 5]
];</code>
ログイン後にコピー

解決策:

目的のグループ化と集計を達成するには、次を利用できます。 PHPの配列操作関数。次の関数について考えてみましょう:

<code class="php">function groupByPartAndType($input) {
  $output = Array();

  foreach($input as $value) {
    $output_element = & $output[$value['part'] . "_" . $value['type']];
    $output_element['part'] = $value['part'];
    $output_element['type'] = $value['type'];
    !isset($output_element['count']) && $output_element['count'] = 0;
    $output_element['count'] += $value['count'];
  }

  return array_values($output);
}</code>
ログイン後にコピー

この関数を入力配列 $arr1 に適用すると、目的の出力 $arr2 が得られます。出力配列の各要素は、同じ「パーツ」値と「タイプ」値を共有するデータ ポイントのグループと、対応する「カウント」値の合計を表します。

代替アプローチ:

両方のデータベース クエリが同じデータベース サーバーから発信されている場合は、SQL の GROUP BY 機能を使用してデータベース自体内でグループ化と集計を実行できる可能性があり、PHP での後処理が不要になります。

以上がPHP で多次元配列データを複数の列でグループ化し、値を集計するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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