なぜこれが常に返されるのですかtrue
:
$s = '334rr';
$i = (int)$s;
if ($i == $s) {
echo true;
} else {
echo false;
}
エコー$i
すると、の値が得られます。これ334
は、とは異なります。 $s
334rr
マニュアルから:
数値を文字列と比較する場合、または比較に数値文字列が含まれる場合、各文字列は数値に変換され、比較は数値で実行されます。
つまり、指定した値($i == $s)
と同じです。($i == (int)$s)
===
型ジャグリングを回避するために使用します。
を使用して文字列と整数を比較すると==
、文字列は整数に大文字小文字を区別しようとします。
これを試して
$s = '334rr';
$i = intval($s);
if ($i == $s) {
echo true;
} else {
echo false;
}
文字列をintと比較することはお勧めしません。===
代わりに、同じデータ型と同じ値を検証するを使用する必要があります。
PHPは、別の整数($ i)と比較するときに、$s文字列を整数に変換します。それは基本的にこれを行います(まあ、私はそれが内部で何をするのかわかりませんが、それはこれに要約されます):
if($i == (int) $s)
これはステートメントを真実にします