PHP では、文字列の比較に ==
演算子を使ってはいけません。
必ず ===
演算子か、strcmp()
を使用するようにします。
==
演算子を使用してしまうと、文字列が数値の形になっている場合に、数値として比較をしてしまいます。
つまり、'1.00'
と '1'
が等しいと判断されてしまいます。
'5abc'
と 5
を比較した場合も内部で数値比較するので、同一とみなされます。
一方で、'5abc'
と '5'
を比較した場合は、異なると判断されます。
こういった直観的ではない ==
演算子を使った文字列比較は避けるべきです。
if ('100' == '100') {...} // true
if ('100' == 100) {...} // true
if ('100' == '0100') {...} // true !
if ('100' == '100.0') {...} // true !
if ('5abc' == 5) {...} // true !
if ('5abc' == '5') {...} // false
if ('5.0' == '5') {...} // true !
if ('5.0' == 5) {...} // true !
何度も書きますが、文字列の比較をする場合は、===
か strcmp()
を使いましょう。
そうすれば自然な結果が得られます。
if ('100' === '100') {...} // true
if ('100' === 100) {...} // false
if ('100' === '0100') {...} // false
if ('100' === '100.0') {...} // false
if ('5abc' === 5) {...} // false
if ('5abc' === '5') {...} // false
if ('5.0' === '5') {...} // false
if ('5.0' === 5) {...} // false
if (strcmp('100', '100') == 0) {...} // true
if (strcmp('100', '0100') == 0) {...} // false
if (strcmp('100', '100.0') == 0) {...} // false
strcmp
の代わりに、strcasecmp
を使用すると、大文字と小文字を区別せずに文字列比較を行うことができます。
if (strcasecmp('abc', 'ABC') == 0) {
print 'Match';
}
strcasecmp()
は文字列が等しい場合に 0 を返すことに注意してください。