PHPには 厳密に同一の比較演算子(>==
または<==
)はありません(少なくともPHP 5.6.14)。ただし、大/小をチェックする前に厳密な型チェックを強制する方法はいくつかあります。
- 両方の変数タイプを確認します
if (gettype($a) === gettype($b))
- 必要な型キャストを強制します。
if ((string)$a === (string)$b)
- 必要な型変換を強制します。
if (($a . '') === ($b . ''))
次のことに注意してください。
- 浮動小数点の精度は制限されています
INF
およびNAN
タイプfloat
がieee754
- いくつかのインフィニティは、いくつかの他の等しいインフィニティ(PHP 5.4以降)を
- 科学的表記
e
は常にタイプfloat
でありinteger
、数が少なくても決してない
- 整数
PHP_INT_MAX
は自動的に次のように変換されますfloat
- システムの境界を越えるフロートは
INF
値を取得します
- 未定義の変数のタイプと値
NULL
- 前に付く整数は
0
8進数から10進数に変換されます(慣例により)
- 先頭
0
に整数を含む文字列を整数に変換すると、先頭が削除されます0
いくつかのエキゾチックな比較のリスト:
非常に奇妙な:
$ a VS. $ b $ a> $ b $ a <$ b $ a <= $ b $ a> = $ b $ a == $ b $ a === $ b
float(NAN)float(-INF)false false false false false false
float(NAN)float(0)false false false false false false
float(NAN)float(1)false false false false false false
float(NAN)float(INF)false false false false false false
float(NAN)float(NAN)false false false false false false
float(NAN)int(-1)false false false false false false
float(NAN)int(0)false false false false false false
float(NAN)int(1)false false false false false false
等しいが同一ではない:
$ a VS. $ b $ a> $ b $ a <$ b $ a <= $ b $ a> = $ b $ a == $ b $ a === $ b
NULL(NULL)array()false false true true true false
NULL(NULL)bool(false)false false true true true false
NULL(NULL)float(0)false false true true true false
NULL(NULL)int(0)false false true true true false
NULL(NULL)str( '')false false true true true false
array()bool(false)false false true true true false
bool(false)float(0)false false true true true false
bool(false)int(0)false false true true true false
str( '')bool(false)false false true true true false
bool(false)str( '0')false false true true true false
float(-INF)bool(true)false false true true true false
bool(true)float(1)false false true true true false
float(INF)bool(true)false false true true true false
float(NAN)bool(true)false false true true true false
bool(true)int(-1)false false true true true false
bool(true)int(1)false false true true true false
bool(true)str( "\ 0")false false true true true false
bool(true)str( '+')false false true true true false
bool(true)str( '-')false false true true true false
bool(true)str('01 ')false false true true true false
bool(true)str( '1')false false true true true false
bool(true)str( 'false')false false true true true false
str( 'text')bool(true)false false true true true false
str( 'true')bool(true)false false true true true false
int(0)float(0)false false true true true false
str( "\ 0")float(0)false false true true true false
str( '')float(0)false false true true true false
str( '+')float(0)false false true true true false
str( '-')float(0)false false true true true false
str( '0')float(0)false false true true true false
str( 'false')float(0)false false true true true false
str( 'text')float(0)false false true true true false
str( 'true')float(0)false false true true true false
int(1)float(1)false false true true true false
float(1)str('01 ')false false true true true false
float(1)str( '1')false false true true true false
str( "\ 0")int(0)false false true true true false
str( '')int(0)false false true true true false
str( '+')int(0)false false true true true false
str( '-')int(0)false false true true true false
int(0)str( '0')false false true true true false
str( 'false')int(0)false false true true true false
str( 'text')int(0)false false true true true false
str( 'true')int(0)false false true true true false
int(1)str('01 ')false false true true true false
int(1)str( '1')false false true true true false
str( '1')str('01 ')false false true true true false
同時に低いと大きい?
$ a VS. $ b $ a> $ b $ a <$ b $ a <= $ b $ a> = $ b $ a == $ b $ a === $ b
float(NAN)str( "\ 0")true true true true false false
float(NAN)str( '')true true true true false false
float(NAN)str( '+')true true true true false false
float(NAN)str( '-')true true true true false false
float(NAN)str( '0')true true true true false false
float(NAN)str('01 ')true true true true false false
float(NAN)str( '1')true true true true false false
float(NAN)str( 'false')true true true true false false
float(NAN)str( 'text')true true true true false false
float(NAN)str( 'true')true true true true false false
同等かつ同一:
$ a VS. $ b $ a> $ b $ a <$ b $ a <= $ b $ a> = $ b $ a == $ b $ a === $ b
NULL(NULL)NULL(NULL)false false true true true true
float(-INF)float(-INF)false false true true true true
float(INF)float(INF)false false true true true true
低いまたは大きい:
$ a VS. $ b $ a> $ b $ a <$ b $ a <= $ b $ a> = $ b $ a == $ b $ a === $ b
NULL(NULL)bool(true)false true true false false false
float(-INF)NULL(NULL)true false false true false false
NULL(NULL)float(1)false true true false false false
float(INF)NULL(NULL)true false false true false false
float(NAN)NULL(NULL)true false false true false false
NULL(NULL)int(-1)false true true false false false
NULL(NULL)int(1)false true true false false false
NULL(NULL)str( "\ 0")false true true false false false
NULL(NULL)str( '+')false true true false false false
NULL(NULL)str( '-')false true true false false false
NULL(NULL)str( '0')false true true false false false
NULL(NULL)str('01 ')false true true false false false
NULL(NULL)str( '1')false true true false false false
NULL(NULL)str( 'false')false true true false false false
NULL(NULL)str( 'text')false true true false false false
NULL(NULL)str( 'true')false true true false false false
array()bool(true)false true true false false false
float(-INF)array()false true true false false false
array()float(0)true false false true false false
array()float(1)true false false true false false
float(INF)array()false true true false false false
float(NAN)array()false true true false false false
array()int(-1)true false false true false false
array()int(0)true false false true false false
array()int(1)true false false true false false
array()str( "\ 0")true false false true false false
str( '')array()false true true false false false
array()str( '+')true false false true false false
array()str( '-')true false false true false false
array()str( '0')true false false true false false
array()str('01 ')true false false true false false
array()str( '1')true false false true false false
array()str( 'false')true false false true false false
array()str( 'text')true false false true false false
array()str( 'true')true false false true false false
bool(true)bool(false)true false false true false false
float(-INF)bool(false)true false false true false false
float(1)bool(false)true false false true false false
float(INF)bool(false)true false false true false false
float(NAN)bool(false)true false false true false false
bool(false)int(-1)false true true false false false
int(1)bool(false)true false false true false false
bool(false)str( "\ 0")false true true false false false
bool(false)str( '+')false true true false false false
bool(false)str( '-')false true true false false false
bool(false)str('01 ')false true true false false false
str( '1')bool(false)true false false true false false
bool(false)str( 'false')false true true false false false
str( 'text')bool(false)true false false true false false
str( 'true')bool(false)true false false true false false
bool(true)float(0)true false false true false false
bool(true)int(0)true false false true false false
str( '')bool(true)false true true false false false
bool(true)str( '0')true false false true false false
float(-INF)float(0)false true true false false false
float(-INF)float(1)false true true false false false
float(INF)float(-INF)true false false true false false
float(-INF)int(-1)false true true false false false
float(-INF)int(0)false true true false false false
float(-INF)int(1)false true true false false false
float(-INF)str( "\ 0")false true true false false false
float(-INF)str( '')false true true false false false
float(-INF)str( '+')false true true false false false
float(-INF)str( '-')false true true false false false
float(-INF)str( '0')false true true false false false
float(-INF)str('01 ')false true true false false false
float(-INF)str( '1')false true true false false false
float(-INF)str( 'false')false true true false false false
float(-INF)str( 'text')false true true false false false
float(-INF)str( 'true')false true true false false false
float(1)float(0)true false false true false false
float(INF)float(0)true false false true false false
float(0)int(-1)true false false true false false
int(1)float(0)true false false true false false
float(0)str('01 ')false true true false false false
str( '1')float(0)true false false true false false
float(INF)float(1)true false false true false false
float(1)int(-1)true false false true false false
float(1)int(0)true false false true false false
float(1)str( "\ 0")true false false true false false
str( '')float(1)false true true false false false
float(1)str( '+')true false false true false false
float(1)str( '-')true false false true false false
float(1)str( '0')true false false true false false
float(1)str( 'false')true false false true false false
str( 'text')float(1)false true true false false false
str( 'true')float(1)false true true false false false
float(INF)int(-1)true false false true false false
float(INF)int(0)true false false true false false
float(INF)int(1)true false false true false false
float(INF)str( "\ 0")true false false true false false
float(INF)str( '')true false false true false false
float(INF)str( '+')true false false true false false
float(INF)str( '-')true false false true false false
float(INF)str( '0')true false false true false false
float(INF)str('01 ')true false false true false false
float(INF)str( '1')true false false true false false
float(INF)str( 'false')true false false true false false
float(INF)str( 'text')true false false true false false
float(INF)str( 'true')true false false true false false
int(0)int(-1)true false false true false false
int(1)int(-1)true false false true false false
str( "\ 0")int(-1)true false false true false false
str( '')int(-1)true false false true false false
str( '+')int(-1)true false false true false false
str( '-')int(-1)true false false true false false
str( '0')int(-1)true false false true false false
int(-1)str('01 ')false true true false false false
str( '1')int(-1)true false false true false false
str( 'false')int(-1)true false false true false false
str( 'text')int(-1)true false false true false false
str( 'true')int(-1)true false false true false false
int(1)int(0)true false false true false false
int(0)str('01 ')false true true false false false
str( '1')int(0)true false false true false false
int(1)str( "\ 0")true false false true false false
str( '')int(1)false true true false false false
int(1)str( '+')true false false true false false
int(1)str( '-')true false false true false false
int(1)str( '0')true false false true false false
int(1)str( 'false')true false false true false false
str( 'text')int(1)false true true false false false
str( 'true')int(1)false true true false false false
str( '')str( "\ 0")false true true false false false
str( '+')str( "\ 0")true false false true false false
str( '-')str( "\ 0")true false false true false false
str( "\ 0")str( '0')false true true false false false
str( "\ 0")str('01 ')false true true false false false
str( '1')str( "\ 0")true false false true false false
str( 'false')str( "\ 0")true false false true false false
str( 'text')str( "\ 0")true false false true false false
str( 'true')str( "\ 0")true false false true false false
str( '')str( '+')false true true false false false
str( '')str( '-')false true true false false false
str( '')str( '0')false true true false false false
str( '')str('01 ')false true true false false false
str( '')str( '1')false true true false false false
str( '')str( 'false')false true true false false false
str( '')str( 'text')false true true false false false
str( '')str( 'true')false true true false false false
str( '-')str( '+')true false false true false false
str( '+')str( '0')false true true false false false
str( '+')str('01 ')false true true false false false
str( '1')str( '+')true false false true false false
str( 'false')str( '+')true false false true false false
str( 'text')str( '+')true false false true false false
str( 'true')str( '+')true false false true false false
str( '-')str( '0')false true true false false false
str( '-')str('01 ')false true true false false false
str( '1')str( '-')true false false true false false
str( 'false')str( '-')true false false true false false
str( 'text')str( '-')true false false true false false
str( 'true')str( '-')true false false true false false
str( '0')str('01 ')false true true false false false
str( '1')str( '0')true false false true false false
str( 'false')str( '0')true false false true false false
str( 'text')str( '0')true false false true false false
str( 'true')str( '0')true false false true false false
str( 'false')str('01 ')true false false true false false
str( 'text')str('01 ')true false false true false false
str( 'true')str('01 ')true false false true false false
str( '1')str( 'false')false true true false false false
str( 'text')str( '1')true false false true false false
str( 'true')str( '1')true false false true false false
str( 'text')str( 'false')true false false true false false
str( 'true')str( 'false')true false false true false false
str( 'true')str( 'text')true false false true false false
$a > $b > $c
難問:$a
がを超えない$c
。
A <C:float(NAN)> str( 'a')> str( '')
A <C:float(NAN)> str( 'a')> str( '1')
A <C:float(NAN)> str( 'a')> str( 'A')
A <C:float(NAN)> str( 'a')> str( '0')
A <C:float(NAN)> str( '1')> str( '')
A <C:float(NAN)> str( '1')> str( '0')
A <C:float(NAN)> str( 'A')> str( '')
A <C:float(NAN)> str( 'A')> str( '1')
A <C:float(NAN)> str( 'A')> str( '0')
A <C:float(NAN)> str( '0')> str( '')
A <C:str( '')> float(NAN)> str( 'a')
A <C:str( '')> float(NAN)> str( '1')
A <C:str( '')> float(NAN)> str( 'A')
A <C:str( '')> float(NAN)> str( '0')
A <C:str( 'a')> str( '')> float(NAN)
A <C:str( 'a')> str( '1')> float(NAN)
A <C:str( 'a')> str( 'A')> float(NAN)
A <C:str( 'a')> str( '0')> float(NAN)
A <C:str( '0')> str( '')> float(NAN)
A == C:bool(true)> str( '')> float(NAN)
A == C:bool(true)> str( '')> float(-INF)
A == C:bool(true)> str( '')> int(-1)
A == C:bool(true)> str( '')> float(-1)
A == C:bool(true)> array()> float(NAN)
A == C:bool(true)> array()> float(INF)
A == C:bool(true)> array()> float(-INF)
A == C:bool(true)> array()> str( 'a')
A == C:bool(true)> array()> int(1)
A == C:bool(true)> array()> float(1)
A == C:bool(true)> array()> str( '1')
A == C:bool(true)> array()> str( 'A')
A == C:bool(true)> array()> int(-1)
A == C:bool(true)> array()> float(-1)
A == C:bool(true)> int(0)> float(-INF)
A == C:bool(true)> int(0)> int(-1)
A == C:bool(true)> int(0)> float(-1)
A == C:bool(true)> str( '0')> float(NAN)
A == C:bool(true)> str( '0')> float(-INF)
A == C:bool(true)> str( '0')> int(-1)
A == C:bool(true)> str( '0')> float(-1)
A == C:bool(true)> float(0)> float(-INF)
A == C:bool(true)> float(0)> int(-1)
A == C:bool(true)> float(0)> float(-1)
A == C:int(1)> str( 'a')> str( '1')
A == C:int(1)> str( 'A')> str( '1')
A == C:float(1)> str( 'a')> str( '1')
A == C:float(1)> str( 'A')> str( '1')
A == C:str( 'a')> str( '1')> int(0)
A == C:str( 'a')> str( '1')> float(0)
A == C:str( '')> float(-INF)> NULL(NULL)
A == C:str( '')> float(-INF)> bool(false)
A == C:str( '')> int(-1)> NULL(NULL)
A == C:str( '')> int(-1)> bool(false)
A == C:str( '')> float(-1)> NULL(NULL)
A == C:str( '')> float(-1)> bool(false)
A == C:array()> float(NAN)> NULL(NULL)
A == C:array()> float(NAN)> bool(false)
A == C:array()> float(INF)> NULL(NULL)
A == C:array()> float(INF)> bool(false)
A == C:array()> float(-INF)> NULL(NULL)
A == C:array()> float(-INF)> bool(false)
A == C:array()> str( 'a')> NULL(NULL)
A == C:array()> str( 'a')> bool(false)
A == C:array()> int(1)> NULL(NULL)
A == C:array()> int(1)> bool(false)
A == C:array()> float(1)> NULL(NULL)
A == C:array()> float(1)> bool(false)
A == C:array()> str( '1')> NULL(NULL)
A == C:array()> str( '1')> bool(false)
A == C:array()> str( 'A')> NULL(NULL)
A == C:array()> str( 'A')> bool(false)
A == C:array()> str( '0')> NULL(NULL)
A == C:array()> int(-1)> NULL(NULL)
A == C:array()> int(-1)> bool(false)
A == C:array()> float(-1)> NULL(NULL)
A == C:array()> float(-1)> bool(false)
A == C:str( '')> float(NAN)> bool(false)
A == C:str( '')> float(NAN)> NULL(NULL)
A == C:str( 'A')> str( '1')> int(0)
A == C:str( 'A')> str( '1')> float(0)
A == C:int(0)> float(-INF)> NULL(NULL)
A == C:int(0)> float(-INF)> bool(false)
A == C:int(0)> int(-1)> NULL(NULL)
A == C:int(0)> int(-1)> bool(false)
A == C:int(0)> float(-1)> NULL(NULL)
A == C:int(0)> float(-1)> bool(false)
A == C:str( '0')> float(NAN)> bool(false)
A == C:str( '0')> float(-INF)> bool(false)
A == C:str( '0')> int(-1)> bool(false)
A == C:str( '0')> float(-1)> bool(false)
A == C:float(0)> float(-INF)> NULL(NULL)
A == C:float(0)> float(-INF)> bool(false)
A == C:float(0)> int(-1)> NULL(NULL)
A == C:float(0)> int(-1)> bool(false)
A == C:float(0)> float(-1)> NULL(NULL)
A == C:float(0)> float(-1)> bool(false)
A === C:str( '0')> float(NAN)> str( '0')
A === C:str( '')> float(NAN)> str( '')
A === C:str( 'a')> float(NAN)> str( 'a')
A === C:str( '1')> float(NAN)> str( '1')
A === C:str( 'A')> float(NAN)> str( 'A')
楽しい文字列比較:「クイーン」>
「キング」>
「ジャック」>
「エース」
また、ペアをカバーするPHPタイプ比較表も確認してください。
isset()
そして is_null()
if()
そして empty()
- ブール
==
対===
PHPのバージョン間の違いを確認してください。http://3v4l.org/MAfDu。
($a > $b) !== ($b < $a)
か?