複数の列による多次元配列データのグループ化と値の集計
問題ステートメント:
あなた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 サイトの他の関連記事を参照してください。