問題:
この問題には、次の配列が含まれます。異なるデータベースにわたる複数のデータベース クエリからのデータ。目標は、2 つの列の値 (「part」と「type」) に基づいて配列要素をグループ化し、各グループの 3 番目の列 (「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>
解決策:
配列要素をグループ化するには「カウント」値を合計するには、次の関数を使用できます。
<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>
この関数は、入力配列を反復処理して、各要素の「部分」値と「タイプ」値を識別します。次に、これらの値をキーとして使用して、出力要素を作成または取得します。各キーについて、関数は「count」フィールドが存在しない場合は初期化し、その要素の「count」フィールドの値を増分します。最後に、グループ化された要素を含む配列を返します。
以上が多次元配列を複数の列値でグループ化し、別の列の値を合計するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。