Re: [請益] 用fgetcsv讀到"0001"時會變成"1"的字串
※ 引述《bil193 (丁丁)》之銘言:
: 標題: [請益] 用fgetcsv讀到"0001"時會變成"1"的字串
: 時間: Thu May 14 18:02:34 2009
:
: 我有一個csv檔,內容是:
:
: 79,"新人","0001","1234","100","099816"
:
: 用$fp=fopen(....)開檔後,
:
: 用
:
: list($sn,$name,$schoolID,$passwd,$grade,$phone)=fgetcsv($fp,1000)
:
: 把這些資料存進變數裡
:
: 但是調查了很久,發現fgetcsv在讀"0001"後存給$schoolID,
:
: 結果會變成「$schoolID的型別為string,內容是1」
:
:
: 上網找了好多資料,還是想不到這個解決辦法
:
: 請問該怎麼讓fgetcsv在讀"0001"時,就讓它判定為"0001"而不是"1"呢?
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc)
: ◆ From: 140.113.98.166
: 推 liaosankai :settype($schoolID,'integer'); 05/14 19:37
: → bil193 :$schoolID最後的型別是要string,問題好像出在 05/14 21:03
: → bil193 :fgetcsv讀到"0001"時 先轉成int成1,再轉成 05/14 21:04
: → bil193 :string成為"1" 再把它存進$schoolID裡... 05/14 21:04
: 推 lgzenith :不要用fgetcsv,改用fgets不就好了 05/15 19:10
: 推 PHP5 :樓上知道 fgetcsv 和 fgets 的差別嗎? 05/15 21:56
: 推 HuangJC :呵,省事吧;學 C 時所有指令都從 byte 打造;雖然有標 05/15 22:45
: → HuangJC :準函式庫,但教基礎打造的書還是很多,且函式庫如果附 05/15 22:45
: → HuangJC :source code,的確就是那樣;但 C 是 Compile 語言,不 05/15 22:46
: → HuangJC :會損失速度,PHP 也打造的話就吃虧了 05/15 22:46
花了好多時間trace code,突然發現不是fgetcsv讀錯,是我在用==時出了問題。
fgetcsv讀到"0001"這個字串,仍會把它當"0001"存給$schoolID,
而$schoolID的型別也是'字串'
不好意思讓各位先進費心了> <
後來發現問題其實是比較"0001"跟"1"時,
if("0001"=="1") 這樣會變成if(true)
在PHP論壇查到,PHP會把'數值內容的字串'轉型成數值,再來比較,就造成了誤判
解決方式是用"==="(三個等號)代替"=="
或是用字串比較函數:strcmp(string1,string2)
小弟後來都用strcmp,就都沒問題了
分享給大家。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.113.91.19
→
05/18 22:13, , 1F
05/18 22:13, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
PHP 近期熱門文章
PTT數位生活區 即時熱門文章