php如果在foreach内部错了

时间:2014-07-31 12:09:25

标签: php foreach

如果在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';        
    }

}

2 个答案:

答案 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.

所以,尝试使用“===”而不是“==”。