【问题标题】:Strange switch-statement behavior奇怪的 switch 语句行为
【发布时间】:2011-11-17 21:05:47
【问题描述】:

谁能告诉我为什么这个switch 语句的输出与if 语句不同? 更重要的是,如何让它们输出相同?

切换

switch ($list_day) { 
        case $today : 
            $calender .= '<td class="today">';
        default : 
            $calender .= '<td>';
    }

如果

if ($list_day == $today) {
        $calendar.= '<td class="today">';
    } else {
        $calendar.= '<td>';
    }

【问题讨论】:

    标签: php if-statement switch-statement


    【解决方案1】:

    您缺少break 声明:

    switch ($list_day) { 
            case $today : 
                $calender .= '<td class="today">';
                break;
            default : 
                $calender .= '<td>';
        }
    

    如果您不跳出 switch 语句执行,则继续执行下一个标签。这允许您将标签链接在一起:

    switch($number) {
    case 1: case 2: case 3:
      echo '1 - 3';
      break;
    case 4:
      echo '4';
      break;
    default
      echo 'any other number';
    }
    

    【讨论】:

    • 谢谢,但它仍然向我显示与 if 语句不同的输出
    • @Michiel:它不应该......你得到的确切输出是什么,预期的输出是什么?您的变量的值,或任何错误?
    • 虽然做得很好,但我找到了真正的答案,看看我的第二个帖子:P
    • 你用两种不同的方式拼写日历,一种正确,一种错误:)
    【解决方案2】:

    你有一个错字:

    switch ($list_day) { 
        case $today : 
            $calendar .= '<td class="today">';
            break;
        default : 
            $calendar .= '<td>';
    }
    

    除了我之前提交的休息时间之外,您还输入了 $calender 而不是 $calendar...

    【讨论】:

    • 也许这应该合并到您的原始答案中?
    【解决方案3】:

    您忘记了 BREAK;

    在 Pascal 风格的代码(例如 pascal、visual basic)中,您不需要在每种情况下都进行 BREAK。但是在 C-Style/Java/PHP/etc 中你需要:

    switch ($list_day) { 
        case $today : 
            $calender .= '<td class="today">';
            break;
        default : 
            $calender .= '<td>';
    }
    

    这可以用来做一些花哨的事情,我会让你自己弄清楚!

    【讨论】:

    • 谢谢,但它仍然向我显示与 if 语句不同的输出
    猜你喜欢
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    相关资源
    最近更新 更多