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 を返すことに注意してください。