無料/デスクトップ壁紙/PSP壁紙/携帯待ち受け/写真素材/PHPスクリプト

Web > PHP > 文字列や数値の比較

数値として比較

これは当然の結果

$a = 1;
$b = 01;

if ($a == $b) {
	echo "true";
} else {
	echo "false";
}
// true

if ($a === $b) {
	echo "true";
} else {
	echo "false";
}
// true

文字列として比較

こちらは結果が違う
== だと true、 === だと false
簡単な違いだけど間違えそうだ

$a = "1";
$b = "01";

if ($a == $b) {
	echo "true";
} else {
	echo "false";
}
// true

if ($a === $b) {
	echo "true";
} else {
	echo "false";
}
// false

数値と文字列の比較

$a = "1";
$b = 1;

if ($a == $b) {
	echo "true";
} else {
	echo "false";
}
// 文字列は数値に変換されて比較されるので true

if ($a === $b) {
	echo "true";
} else {
	echo "false";
}
// 型が違うので false

if ($a === (string)$b) {
	echo "true";
} else {
	echo "false";
}
// 明示的に文字列として比較すれば true
// (逆に (int)$a === $b でも true)

8進数と16進数での比較

/*
 16進数
*/
$a = "0x0A";
$b = 10;

if ($a == $b) {
	echo "true";
} else {
	echo "false";
}
// true
// 自動的に16進数として変換されている



/*
 8進数
*/
$a = "010";
$b = 8;

if ($a == $b) {
	echo "true";
} else {
	echo "false";
}
// false
// 8進数は自動的にならない?

if (intval($a, 8) == $b) {
	echo "true";
} else {
	echo "false";
}
// true
// 明示的に8進数としてやらないとダメ?

参考

PHP: 比較演算子 - Manual
PHP: intval - Manual

最終更新日 2010/06/03