下記read_csv.phpのコード53行目
echo "<td>", es(number_format($price)), "</td>";が、
下記のようにエラーが出ますが、該当箇所を見ても何が間違っているのかがわかりません。
お手数おかけしますが、ご回答頂けると幸いです。
宜しくお願いします。
エラーログ
[01-Aug-2018 05:50:03 UTC] PHP Warning: number_format() expects parameter 1 to be float, string given in /Applications/MAMP/htdocs/read_csv.php on line 53
read_csv.php(CSVファイルを読み込んでテーブル表示する)
<?php require_once("util.php"); ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>SplFileObjectでCSVファイルを読み込む</title> <link href="../../css/style.css" rel="stylesheet"> <link href=""../../css/tablestyle.css" rel="stylesheet"> </head> <body> <div> <?php $filename = "mydata.csv"; try { //ファイルオブジェクトを作る(rb読み込みのみ。ファイルの先頭から読み込む) $fileObj = new SplFileObject($filename, "rb"); } catch (Exception $e) { echo '<span class="error">エラーがありました。</span><br>'; echo $e->getMessage(); exit(); } //CSVファイルを読み込む(完全な空行はスキップする) $fileObj->setFlags( SplFileObject::READ_CSV | SplFileObject::READ_AHEAD | SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE ); //テーブルのタイトル行 echo "<table>"; echo "<thead>"; echo "<th>","ID","</th>"; echo "<th>","商品名","</th>"; echo "<th>","価格","</th>"; echo "</tr></thead>"; //値に取り出して行に表示する echo "<tbody>"; foreach ($fileObj as $row) { //配列を変数に取り出す list($id, $name, $price) = $row; //価格が入ってない場合はスキップする if ($price=="") { countinue; } //1行ずつテーブルに入れる echo "<tr>"; echo "<td>", es($id), "</td>"; echo "<td>", es($name), "</td>"; echo "<td>", es(number_format($price)), "</td>"; echo "</tr>"; } echo "</tbody>"; echo "</table>"; ?> </div> </body> </html>
export_csv.php(PHPのデータをCSVファイルに書き出す)
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>SplFileObjectでCSVファイルに書き込む</title>title> <link href="../../css/style.css" rel="stylesheet"> </head> <body> <div> <?php $filename = "mydata.csv"; //CSVのヘッダ行 $csv_header = ["id","名前","年齢","趣味"]; //CSVのデータ $csv_data = []; $csv_data[] = ["a10","高橋久美","36","沢登り"]; $csv_data[] = ["a11","手塚雄一","31","トレラン"]; $csv_data[] = ["a12","戸高栄里","18","料理"]; $csv_data[] = ["a13","迫田信治","23","ボルダリング"]; $csv_data[] = ["a14","山岡南美","26","サーフィン"]; try { //ファイルオブジェクトを作る(wb 新規書き出し。ファイルがなければ作る) $fileObj = new SplFileObject($filename, "wb"); } catch (Exception $e) { echo '<span class="error">エラーがありました。</span><br>'; echo $e->getMessage(); exit(); } //ヘッダ行をCSVに書き出す $fileObj->fputcsv($csv_header); //データをCSVに追加する foreach ($csv_data as $value) { $fileObj->fputcsv($value); } echo "{$filename}の書き出しが終わりました。"; ?> </div>div> </body> </html>
convert2shiftjis_crlf.php(Shift-JIS,CRLF,ダブルクォーテーション囲みに変換する)
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>ShiftJIS, CRLFファイルに変化する</title> </head> <body> <div> <?php $filename = "mydata.csv"; $filename_win = "mydata_win.csv"; try{ //ファイルオブジェクトを作る(rb読み込み専用) $fileObj = new SplFileObject($filename, "rb"); //ファイルオブジェクトを作る(wb新規書き出し。ファイルがなければ作る) $fileObj_win = new SplFileObject($filename_win, "wb"); } catch (Exception $e) { echo '<span class="error">エラーがありました。</span><br>'; echo $e->getMessage(); exit(); } //ストリングを読み込む $readdata = $fileObj->fread($fileObj->getSize()); $fileObj = NULL; //改行コードをLFからCRLFにする $outdata = str_replace("\n","\r\n",$readdata); //ShiftJISに変換する $outdata = mb_convert_encoding($outdata, "SJIS","auto"); //ダブルクォーテーションで囲む $outdata = str_replace(",",'","', $outdata); $outdata = str_replace("\r\n", "\"\r\n\"", $outdata); //先頭に追加し、最後の1個を取り除く $outdata = '"' . $outdata; $outdata = mb_substr($outdata, 0, -1, "SJIS"); //ファイルに書き込む $written = $fileObj_win->fwrite($outdata); if ($written===FALSE){ echo '<span class="error">', "{$filename_win}に保存できませんでした。</span>"; } else { echo "{$filename}をShift-JIS、CRLFに変換した{$filename_win}を書き出しました。"; } ?> </div> </body> </html>
回答3件
あなたの回答
tips
プレビュー