質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

1回答

7553閲覧

[PHP] 連想配列で重複している値を合算したい

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2015/10/08 06:34

具体的には下記のような配列 $itemを「category_id」が同一の値だった場合、その他のキーの値を合算させて合算先の配列を削除したいです。


Array
(
[0] => Array
(
[category_id] => 44
[total] => 4132
[use_point] => 500
[payment_total] => 3632
)

[1] => Array ( [category_id] => 44 [total] => 4672 [use_point] => 0 [payment_total] => 4672 ) [2] => Array ( [category_id] => 409 [total] => 3700 [use_point] => 0 [payment_total] => 3700 ) [3] => Array ( [category_id] => 488 [total] => 6940 [use_point] => 0 [payment_total] => 6940 )

という配列があった場合これを下記のようになる感じです。


Array
(
[0] => Array
(
[category_id] => 44
[total] => 8804
[use_point] => 500
[payment_total] => 8304
)
[1] => Array
(
[category_id] => 409
[total] => 3700
[use_point] => 0
[payment_total] => 3700
)

[2] => Array ( [category_id] => 488 [total] => 6940 [use_point] => 0 [payment_total] => 6940 )

このような形にしたいです。
google検索等で調べて類似の質問はあったのですが、専用の関数等はなく自作するしかないとの記載がありました。新たに配列を作りなおしてコピーするような形になるかとは思うのですが具体的にどのようにすれば良いのかがわかりません。

何卒宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

category_id がユニークならIDでまとめてあげれば良いかと思います。

配列の体系を変更出来ない場合は、合計を求めた後で、
元に戻す処理をすればいいのでコメントアウトの部分を
外すとその処理が行われます。

PHP

1<pre> 2<?php 3$arrays = array( 4 0 => array( 5 'category_id' => 44, 6 'total' => 4132, 7 'use_point' => 500, 8 'payment_total' => 3632 9 ), 10 1 => array( 11 'category_id' => 44, 12 'total' => 4672, 13 'use_point' => 0, 14 'payment_total' => 4672 15 ), 16 2 => array( 17 'category_id' => 409, 18 'total' => 3700, 19 'use_point' => 0, 20 'payment_total' => 3700 21 ), 22 3 => array( 23 'category_id' => 488, 24 'total' => 6940, 25 'use_point' => 0, 26 'payment_total' => 6940 27 ) 28); 29$tmp = array(); 30var_dump($arrays); 31 32echo "<hr />"; 33 34foreach( $arrays as $val ) 35{ 36 $tmp[$val['category_id']]['total'] += $val['total']; 37 $tmp[$val['category_id']]['payment_total'] += $val['payment_total']; 38 $tmp[$val['category_id']]['use_point'] += $val['use_point']; 39} 40 41$arrays = $tmp; 42 43// ######################### 44// #元の配列の体系に戻すならコメントアウト 45// ######################### 46// $arrays = array(); 47// $i = 0; 48// foreach( $tmp as $id => $val ) 49// { 50// $arrays[$i]['category_id'] = $id; 51// $arrays[$i]['total'] = $val['total']; 52// $arrays[$i]['payment_total'] = $val['payment_total']; 53// $arrays[$i]['use_point'] = $val['use_point']; 54// $i++; 55// } 56 57var_dump($arrays); 58?> 59</pre>

投稿2015/10/08 07:19

編集2015/10/08 07:25
NIA

総合スコア181

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問