如果在foreach内部我有问题。 代码的答案必须是“Equal”,但是“EqualEqual”。
这是我的代码
$list=array(
"X" => "X",
"0" => "0",
"2" => "2",
"3" => "3"
);
$var="X";
foreach ($list as $key => $val){
if ($var==$key) {
echo 'Equal';
}
}
答案 0 :(得分:6)
使用:
if ($var===$key) {
echo 'Equal';
}
您需要===
因为var_dump($var==0);
返回true,这是在类型杂耍之后。
答案 1 :(得分:1)
var_dump('X' == 0);//true
参考 - http://php.net/manual/en/language.operators.comparison.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
如果您将数字与字符串进行比较或比较涉及数字字符串,则每个字符串都会转换为数字,并且数字会进行比较。这些规则也适用于switch语句。当比较为===或!==时,不会发生类型转换,因为这涉及比较类型和值。
$a == $b Equal TRUE if $a is equal to $b after type juggling.
$a === $b Identical TRUE if $a is equal to $b, and they are of the same type.
所以,尝试使用“===”而不是“==”。