質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

4596閲覧

CSVファイルを読み込んでテーブル表示をさせたい。

bitcoiner2045

総合スコア47

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/08/01 06:41

下記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>

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/08/01 06:42

エラーメッセージの意味が理解できないのですか?それとも読んですらいないのですか?
bitcoiner2045

2018/08/01 06:46

読んではいます。意味が理解できないです。
退会済みユーザー

退会済みユーザー

2018/08/01 06:46

直接のアドバイスではありませんが、PhpStorm、NetBeans、Eclipseなどデバッグに強い開発環境を導入してみてはいかがでしょうか。自己解決しやすくなりますよ。
bitcoiner2045

2018/08/01 06:51

PhpStorm、NetBeans、Eclipseググって導入してみます。ありがとうございます。
i_sugiyama_tomo

2018/08/01 06:59

あとexport_csv.phpでCSVに書き出してるデータとread_csv.phpで呼び出してるデータの内容が違いますね
guest

回答3

0

PHP Warning: number_format() expects parameter 1 to be float, string given in /Applications/MAMP/htdocs/read_csv.php on line 53

number_format() 関数は、第一引数に float(型)を期待していますが、string(型)が与えられました。

という意味です。エラーメッセージは定型なので、覚えてください。

では、実際のコードはどうなっているのか。number_formatを使っているところなので、この部分ですね。

php

1echo "<td>", es(number_format($price)), "</td>";

第一引数は () の中のこと。$price のことです。この $pricestring(文字列型) ですよと言われてます。

php

1var_dump($price); 2echo "<td>", es(number_format($price)), "</td>";

というように、var_dump() で確認すれば、

php

1string(00) "000000"

というように値を確認できるし、型も確認できます。

文字列をfloat(浮動小数型)に変換して、あげれば良いことがわかります。

変換(キャスト)はPHPの場合、

php

1(float) $price;

のようにすれば良いので、

php

1echo "<td>", es(number_format((float) $price)), "</td>";

というように記述すれば良いことがわかります。

投稿2018/08/01 06:58

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/08/01 06:59

長文書いてたら、すでに閉じてたw
退会済みユーザー

退会済みユーザー

2018/08/01 07:04

よくある
退会済みユーザー

退会済みユーザー

2018/08/01 07:14 編集

それはそれでいいけどね。
guest

0

申し訳ありませんコメントを書いているつもりで間違えました

投稿2018/08/01 06:56

編集2018/08/01 06:58
i_sugiyama_tomo

総合スコア85

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bitcoiner2045

2018/08/01 07:04

お気遣いなく。ありがとうございます。
guest

0

ベストアンサー

number_format() expects parameter 1 to be float, string given

$price に文字列データが入っていて、float型じゃないから関数の処理を適用できない、
って意味です。
単語を辞書引きすればわかる簡単なエラーメッセージです。
phpにだってデータ型の概念はあります。
es(number_format(floatval($price))) などとして型変換してあげてはいかがでしょうか。
(ただし、$priceに数値として解釈できない文字列が入っている場合の対策も考えないといけないかもしれませんが。)

投稿2018/08/01 06:50

編集2018/08/01 06:53
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問