【问题标题】:PHP: Switch weird behavior [duplicate]PHP:切换奇怪的行为[重复]
【发布时间】:2013-01-31 01:41:08
【问题描述】:

可能重复:
PHP expresses two different strings to be the same

我在理解 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;
}
?>

现在总是返回 这是 G

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

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

【问题讨论】:

    标签: php logic


    【解决方案1】:

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

    注意:开关使用松散比较

    检查这个问题:PHP expresses two different strings to be the same

    【讨论】:

    • 完全正确。我不知道switch的比较是这样进行的。 [捂脸]谢谢
    【解决方案2】:

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

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

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

    【讨论】:

    • 谢谢,你每天都能学到新东西
    猜你喜欢
    • 2020-03-27
    • 1970-01-01
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 2019-12-13
    相关资源
    最近更新 更多