首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >开关触发频率过高

开关触发频率过高
EN

Stack Overflow用户
提问于 2015-02-14 17:12:32
回答 3查看 38关注 0票数 0

我不能把头绕着这件事。也许有一个简单的解决办法,问题已经解决了,但我找不到答案。

代码语言:javascript
复制
<?php
    $string = '';
    $array = array(1, 2, 3);
    foreach($array as $number) {
        switch($number) {
            case '1':
                $string .= 'I ';
            case '2':
                $string .= 'love ';
            case '3':
                $string .= 'you';
        }
    }
    echo $string;
    ?>

正如你可能已经猜到的,产生的句子应该是:我爱你。

但这才是真正的输出:我爱你爱你

当开关只触发三次时,这怎么可能呢?同时,我知道问题可以在每个案例之后用一个>break;<来解决。但我仍不明白为何要这样做。如果有人能向我解释PHP正在做什么,我会非常高兴的。情人节快乐!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-14 17:16:48

当case 1匹配时,它也将执行case 23,除非出现中断。

因此,每次通过循环,匹配的情况和下面的一切都会被执行。

第一次:案例123 第二次:案例23 第三次:案例3

票数 1
EN

Stack Overflow用户

发布于 2015-02-14 17:21:43

作为参考,这里有一个开关上的PHP文档的摘录,它比我可能更好地解释了它。:)

了解开关语句是如何执行以避免错误的,这一点很重要。开关语句逐行执行(实际上,语句逐行执行)。在开始时,不执行任何代码。只有在找到一个具有与switch表达式值匹配的case语句时,PHP才开始执行这些语句。PHP继续执行语句,直到开关块结束,或者第一次看到block语句为止。如果您没有在case语句列表的末尾写入break语句,PHP将继续执行以下情况的语句。例如:

代码语言:javascript
复制
<?php
switch ($i) {
    case 0:
        echo "i equals 0";
    case 1:
        echo "i equals 1";
    case 2:
        echo "i equals 2";
}
?>

在这里,如果$i等于0,则PHP将执行所有回显语句!如果$i等于1,则PHP将执行最后两个回显语句。只有当$i等于2时,您才会得到预期的行为('i等于2‘)。因此,重要的是不要忘记want语句(即使在某些情况下您可能想避免故意提供它们)。

票数 1
EN

Stack Overflow用户

发布于 2015-02-14 17:33:47

当您不指定break时,代码的执行将进入下一种情况。

例如,分数为十分之一的试卷可以按以下方式评分:

代码语言:javascript
复制
switch ($score)
{
    case 10:
        // A+ when score is 10
        echo 'A+';
        break;
    case 9:
    case 8:
        // A when score is 8 or 9
        echo 'A';
        break;
    case 7:
    case 6:
        // B when score is 7 or 6
        echo 'B';
        break;
    case 5:
    case 4:
    case 3:
        // C when score between 3 and 5
        echo 'C';
        break;
    default:
        // Failed if score is less than 3
        echo 'Failed';
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28518060

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档