3

可能重复:
PHP 将两个不同的字符串表示为相同

我很难理解是什么导致了 switch case 指令中这种奇怪的行为。

代码是这样的:

<?php
$myKey = "0E9";

switch ($myKey) {
    case "0E2":
        echo "The F Word";
        break;
    case "0E9":
        echo "This is the G";
        break;
    default:
        echo "Nothing here";
        break;
}
?>

该指令的结果应该是This is the G

好吧,不是这样。总是返回F 字

如果我们把左边的0E9指令反转为开头并尝试找到值0E2

<?php
$myKey = "0E2";

switch ($myKey) {
    case "0E9":
        echo "The G String";
    break;
    case "0E2":
        echo "The F Word";
        break;       
    default:
        echo "Nothing here";
        break;
}
?>

现在总是返回This is the G

0E20E9值不解释为文本?那些Values被保留?

有人可以解释这种行为吗?

4

2 回答 2

5

"0E2" == "0E9"true因为它们是数字字符串

注意:开关使用松散比较

检查这个问题:PHP 表示两个不同的字符串是相同的

于 2013-01-31T01:43:31.027 回答
1

诸如此类的数字字符串彼此相等..总是。不幸的是,没有办法通过switch. 你只需要使用if

if ($myKey === '0E9') {
   echo 'g';
}
else if ($myKey === '0E2') {
   echo 'f';
}
else {
   echo "Nothing here";
}

我想你也可以修剪前导零。

于 2013-01-31T01:47:00.183 回答