PHPで文字列を比較する方法:strcmp()

PHPで文字列を比較するときはstrcmp()を使います。

文字列を比較する

strcmp()の記述方法は以下のとおりです。

strcmp(文字列1, 文字列2)

strcmp()では引数に渡した「文字列1」と「文字列2」が比較されます。

「文字列1」が「文字列2」 よりも小さければ負の整数を、「文字列1」が 「文字列2」よりも大きければ正の整数を、 等しければ0を返します。

また、大文字と小文字は区別されます。もし区別したくない場合は、strcasecmp()を使用してください。

以下は文字列「1st」と「1st」という文字列を比較した例です。

<?php
if ( strcmp("1st", "1st") == 0 ) {
    echo "同じ文字列です\n";
} else {
    echo "異なる文字列です\n";
}
?>

上のプログラムを実行すると「同じ文字列です」と表示されます。

次の例は文字列「1st」と「2nd」という文字列を比較したものです。

<?php
if ( strcmp("1st", "2nd") == 0 ) {
    echo "同じ文字列です\n";
} else {
    echo "異なる文字列です\n";
}
?>

上のプログラムを実行すると「異なる同じ文字列です」と表示されます。

「==」を使って文字列を比較する

他のプログラミング言語では「==」を使って文字列を比較することがあります。

もしPHPで「==」を使って文字列を比較してみるとどうなるでしょうか。

<?php
var_dump(0 == "a");      // 0 == 0 -> true
var_dump("1" == "01");   // 1 == 1 -> true
var_dump("10" == "1e1"); // 10 == 10 -> true
var_dump(100 == "1e2");  // 100 == 100 -> true
?>

引用:http://www.php.net/manual/ja/language.operators.comparison.php

上の例ではすべて異なるもの同士を比較しているのにも関わらず、すべて結果は「true」になります。 これはPHPでは「==」で比較する場合、文字列に数値形式のものが含まれていると、文字列が数値に変換され、数値として比較されるからです。

以上のことから、特別な理由がない限り文字列を比較するときはstrcmp()を使った方がいいでしょう。