CSVデータを読み込み、ファイルにカテゴリを分けて書きこむ
CSVファイル例
01,0101,○○○,○○○□□,010101,
01,0102,○○○,○○○■□,010102,
02,0201,○○○,○○○□□,020101,
・・・・・
というファイルがあったとすると、
1番目の「01」「02」と、分けて別のファイルに保存がしたいです。
書き込み自体は出来るようなのですが、なぜかループが、番号ごとに1回しかされずに、
log/01.cgi
01<>0101<>○○○<>○○○□□<>010101
log/01.cgi
02<>0201<>○○○<>○○○□□<>020101
となってしまい、全ての生成したファイルには1行しか格納されていません。
ちなみに、csvファイルは1万行近くあります。
ソースはこのような感じです。
$log = "△△△.csv"; # ログ名
$lines = file("$log");
foreach ($lines as $l) {
$line = explode(",",$l);
$push_line = $line[0]."<>".$line[1]."<>".$line[2]."<>".$line[3]."<>".$line[4]."<>\n";
$LOG[$line[0]] .= $push_line;
$cate = $line[0].",,".$line[1]; # サブカテゴリ用
$LOG[$cate] .= $push_line; # カテゴリ用ログを保存
}
なお、csvファイルは、
01・・・
02・・・
01・・・
03・・・
のようになっているため、全ての行を読み込むことはしていると思います。
しかし、ログファイルにはなぜか1行分しか書き込まれていません。書き込みの文は以下になります。
foreach($LOG as $key => $value){
$explode = explode(",,",$key);
if($explode[0]){
$logfile = "./log/".urlencode($explode[0]).".cgi";
}
$file = fopen("$logfile", 'w');
flock($file,LOCK_EX);
fwrite($file, $value);
flock($file,LOCK_UN);
fclose($file);
解決法が分かる方、回答のほどよろしくお願いいたします。
お礼
回答有り難うございました.