a.csv
============
みかん,宮崎,-4,
みかん,宮崎,10,
りんご,宮崎,3,
りんご,宮崎,-7,
みかん,大阪,-4,
みかん,大阪,4,
りんご,大阪,5,
りんご,大阪,-8,
============
があります
これを1列目と2列目が同じものの3列目の数字を合計して
b.csvとして出力したいです
こんな感じ↓
========
みかん,宮崎,6,
りんご,宮崎,-4,
みかん,大阪,0,
りんご,大阪,-3,
========
どのようなphpを組めばいいでしょうか?
こちらの質問の続きです
http://q.hatena.ne.jp/1465916346
<?php function str_quote($ary, $c=',', $t="\n") { $str = ''; foreach ($ary as $k=>$v) $str .= $k.$c.$v.$t; return $str; } $csv = []; foreach(file('a.csv') as $line) { list($fruit, $local, $value) = explode(',', trim($line)); $name = $fruit.','.$local; $csv["$name"] = (array_key_exists($name, $csv) ? $csv["$name"]: 0)+intval($value); } file_put_contents('hoge.cvs', str_quote($csv));
1列目と2列目が同じものというのは1列目と2列目を結合して1列目とすることで
http://q.hatena.ne.jp/1465916346 と同一になります。
ファイルに出力するために$csvを文字列化する関数str_quoteとしました。
制限:a.csvで数字の後にカンマがあるので4列になっていますが無視しています。
またファイルに出力する最は後ろにカンマをつけていないので必要ならstr_quoteの
$k.$c.$v.$t;の部分を
$k.$c.$v.$c.$t;とする必要があります。
コメント(0件)