下記のようなcsvファイルを読み込んでweb上に表示させる画面を作りました
20170410,タイトル1 20170411,タイトル2 20170412,タイトル3 20170413,タイトル4 20170414,タイトル5
まずfile関数で1行ずつ配列に格納しました
<?php $array = file("/history.csv"); // $array[0]は"20170410,タイトル1" // $array[1]は"20170411,タイトル2" ?>
後はこの配列をループさせて画面に表示するだけ
<?php $array = file("/history.csv"); $content .= "<ul>"; for($i = 0;$i < count($array);$i++){ $str = split(",", $array[$i]); $dt = date('Y/m/d', strtotime($str[0])); $content .= "<li>".$dt." ".$str[1]."</li>"; } $content .= "</ul>"; echo $content; ?>
画面で表示した結果
2017/04/10 タイトル1 2017/04/11 タイトル2 2017/04/12 タイトル3 2017/04/13 タイトル4 2017/04/14 タイトル5
ここまではよかったのですが、この配列にデータを追加してその内容でcsvファイルを更新ようとした時問題が発生しました。
<?php $array = file("/history.csv"); array_push($array, "20170415,タイトル6"); $file = fopen("/history.csv", "w"); for($i = 0;$i < count($array);$i++){ @fwrite($file, $array[$i]."\r\n"); } fclose($file); ?>
出力したcsvファイル
2017/04/10 タイトル1 2017/04/11 タイトル2 2017/04/12 タイトル3 2017/04/13 タイトル4 2017/04/14 タイトル5 2017/04/15 タイトル6
何故か改行が増えてる・・・
改行コードは1個だけしか付加してないのに
原因はfile関数でcsvファイルを読み込む時に改行コードまで読み込んでいたから
読み込んだ時に下記のようになっていたということです
<?php $array = file("/history.csv"); // $array[0]は"20170410,タイトル1\r\r" // $array[1]は"20170411,タイトル2\r\r" ?>
file関数オプションにFILE_IGNORE_NEW_LINESを追加することで改行コードは付加されずに読み込まれます
<?php $array = file("/history.csv", FILE_IGNORE_NEW_LINES); // $array[0]は"20170410,タイトル1" // $array[1]は"20170411,タイトル2" ?>
修正後に出力したcsvファイル
2017/04/10 タイトル1 2017/04/11 タイトル2 2017/04/12 タイトル3 2017/04/13 タイトル4 2017/04/14 タイトル5 2017/04/15 タイトル6