人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

a.csvがあります
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

●質問者: gaugjiuaej
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● tobeoscontinue
ベストアンサー
<?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.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ