• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:0をstringにできません。)

PHPでの文字列と数値の比較について

このQ&Aのポイント
  • PHPの仕様により、数字の0を文字列として扱う際には注意が必要です。
  • 数値として比較する場合、0はFALSEとなりますが、文字列として比較する場合は"0"でもTRUEとなります。
  • このような挙動は、PHPの内部的な仕組みによるものであり、注意が必要です。

質問者が選んだベストアンサー

  • ベストアンサー
  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

"0"の場合にstringとして扱われないわけではなく、 if($in==FALSE) のときに、$inが暗黙の型変換でbooleanに変換され、FALSEと扱われているのでしょう。 booleanに変換したときのFALSEと見なされる値については、以下のURLを参照してください。 http://phpspot.net/php/man/php/language.types.boolean.html

gorogoro_01
質問者

お礼

早速のご回答有り難うございます。 なるほど、そういう仕様になっていたのですね。 「 booleanに変換する場合、次の値はFALSEとみなされます。 空の文字列、 および文字列の "0"」 とかいてありました。 ちなみに"0"でなく"00"のように使えば期待した結果になりました。 ------------------------------------------ echo("<br>数値として比較:"); $in=00; echo('<br>00の場合値は'); if($in==FALSE){echo('FALSE');}else{echo('TRUE');} $in=1; echo('<br>1の場合値は'); if($in==TRUE){echo('TRUE');}else{echo('FALSE');} echo("<br><br>文字列として比較:"); $in='00'; settype($in,"string"); echo('<br>"00"の場合値は'); if($in==FALSE){echo('FALSE');}else{echo('TRUE');} $in='1'; settype($in,"string"); echo('<br>"1"の場合値は'); if($in==TRUE){echo('TRUE');}else{echo('FALSE');} ------------------------------------------ 出力結果 ------------------------------------------ 数値として比較: 00の場合値はFALSE 1の場合値はTRUE 文字列として比較: "00"の場合値はTRUE "1"の場合値はTRUE ------------------------------------------

関連するQ&A