duanhan9479 2018-02-05 08:45
浏览 76
已采纳

对于Case的多个条件,Switch Statement无法正常工作

$letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']; 
$x = (1==1 || 2==2);
$y = (3==3 || 4==4);
$z = (5==5);

foreach ($letters as $key => $letter) {
        switch ($letter) {
            case 'a':
                echo "a";
                    break;
            case 'b':
                echo "b";
                    break;
            case 'c':
                echo "c";
                    break;
            case 'd':
                echo "d";
                    break;
            case 'e':
                echo "e";
                    break;
            case 'f':
                echo "f";
                    break;
            case 'g' && ($z || $y):
                echo "g";
                    break;
            case 'h' && ($x):
                echo "h";
                    break;
        }
}

I don't know why but at the last two cases the 'g' and 'h' It doesn't work properly and gets a double 'g', The result i expect is

abcdefgh but i keep getting abcdefgg, What am I doing wrong?

展开全部

  • 写回答

2条回答 默认 最新

  • duanli8577 2018-02-05 08:53
    关注

    Given your code, the g case will always evaluate to true:

    var_dump('g' && ((5==5) || (3==3 || 4==4))); // true
    

    switch cases use loose comparison and when $letter is g it will be evaluated with true. Since g is loosley true it will execute that case:

    var_dump('g' == true);  // true
    var_dump('g' == false); // false
    

    You probably need this:

            case 'g':
                if(($z || $y)) { echo "g"; }
                    break;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部