PHPの質問です CSVの計算したいので方法教えてください

a.csv
======
玉子,50
玉子,-50
猫,50
猫,-12
======
があり
これを一列目が同じものを2列目の数を合計したいと思ってます

こんな感じです
b.php
=====
玉子,0
猫,38
=====

どのようなPHPプログラムを組めばいいでしょうか?
教えてください よろしくお願いします

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2016/06/17 16:32:58

ベストアンサー

id:tobeoscontinue No.1

回答回数220ベストアンサー獲得回数59

<?php
$csv = [];
foreach(file('a.csv') as $line) {
  list($name, $value) = explode(',', trim($line));
  $csv["$name"] = (array_key_exists($name, $csv) 
                    ? $csv["$name"]: 0)+intval($value);
}
foreach ($csv as $name => $value)
  print $name.','.$value."\n";

一列目が同じものを判別するにはif文を使うのが一般的だと思うのですが連想配列を
用いる方法で書いてみました。
fileで配列に取り込みforeachで各行を処理します。
trimで改行コードを削除しexplodeで分割したものをlistで$nameと$valueに代入します。
$nameをキーに連想配列$csvに足し込みます
array_key_existsで三項演算子を使っている部分がスマートぢゃないですが。

処理が終わるまで全てメモリ内にため込みますのでa.csvファイルが巨大な場合には適しません。

id:gaugjiuaej

完成したものを file_put_contents  でファイルに出力する場合はどうすればいいのでしょうか?

2016/06/16 20:13:37

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません