忍者ブログ

Wordpressメモとかアフィめもとか

Wordpress,PHP,アフィリエイトとかの個人メモを記録していくよ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

PHPの文字列比較 (数値型と文字列型の比較)

PHPでは文字列型と数値型を比較する場合など、違う型同士の比較は強制的に内部で型変換が行われているらしい。

引用:PHPマニュアル PHP:比較演算子

なので、↓のがtrueになる。

if ("1234abc" == 1234) {
  echo 'true';
} else {
  echo 'false';
}

これはPHPのバグではなくて仕様との事。
内部的に下記のようになっている。

if ((int)"1234abc" == 1234) {
  echo 'true';
} else {
  echo 'false';
}

(int)でint型にキャストされるため。

echo (int)"1234abc";すれば1234が出力される。

文字列型をint型にキャストすると以下のようになる。
echo (int)"1234abc";  //1234
echo (int)"0z1234abc";  //0
echo (int)"01234abc";  //1234
echo (int)"   1234abc";  //1234
echo (int)"abc";  //0

つまり、文字列の先頭が数値ならばそこの値を取得し、そうでなければ0になるとの事。

なので、両辺を""でくくって文字列型にそろえて比較するなどが必要。
ただし、両辺が数値型の場合は例外がある。

if ("1234.0" == "1234") {
  echo 'true';
} else {
  echo 'false';
}
この場合、文字列型で比較しているのでfalseなると思いきや、ならない。
PHPでは数値形式の文字列を比較する場合、整数として比較されるため。

なので、文字列の比較は"==="を使いましょうというお話。
perlでいうところの文字列比較eqと同じ使い方。

 

 

拍手[3回]

PR

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

ブログ内検索

最新コメント

広告

プロフィール

なんとなくはじめてみたよ

忍者ツールズプロフィールは終了しました

カウンター