3

重複の可能性:
PHP は 2 つの異なる文字列を同じものとして表現します

スイッチケース命令でこの奇妙な動作を引き起こす原因を理解するのに問題があります。

コードは次のとおりです。

<?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 の値はテキストとして解釈されませんか? それらの値は予約されていますか?

誰かがこの動作を説明できますか?

4

2 に答える 2

5

"0E2" == "0E9"数値文字列trueだからです。

注:スイッチは緩やかな比較を使用します。

この質問を確認してください: PHP は 2 つの異なる文字列を同じものとして表現します

于 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 に答える