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

多次元配列を 2 つの列でグループ化し、各グループの値を合計するにはどうすればよいでしょうか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-06 01:16:02830ブラウズ

How do you group a multidimensional array by two columns and sum values for each group?

多次元配列データを 2 つの列でグループ化し、各グループの値を合計する

2 つの別々のデータベース クエリの結果を結合して作成された配列を考えます。次のようなもの:

$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]
];

目標はこれをグループ化することです「part」列と「type」列による配列を作成し、各グループの「count」値の合計を計算します。

これを実現するには、次の関数を利用できます。

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

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

  return array_values($output);
}</code>

これ関数は入力配列を反復処理し、「part」値と「type」値の組み合わせをキーとする要素を出力配列に設定します。各出力要素について、「part」、「type」、および「count」フィールドが適切に設定され、「count」フィールドがまだ設定されていない場合は必ずゼロに初期化されます。この関数は、出力配列から値の配列を返します。

この関数を $arr1 に適用すると、目的の結果が得られます。

$arr2 = [
    ['part' => '1', 'type' => '1', 'count' => 15],
    ['part' => '2', 'type' => '1', 'count' => 10],
    ['part' => '2', 'type' => '2', 'count' => 5]
];

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。