为什么这个switch语句满足两种情况?

时间:2013-07-19 14:48:58

标签: php loops switch-statement

我正在尝试调试这个聚合循环,我发现在案例一完成'Aggregated'之后它会过去并且第二种情况也会进行'非聚合'。知道为什么会这样吗?

<?php
$agg =  $_POST['agg'];
$m=0;
$j=0;
switch ($agg)
{
    case 'Aggregated':
    while ($m<=$i)
    {
        echo $bing_results[$m];
        echo $Faroo[$m];
        echo $Blekko[$m];
        echo 'Results AGG: '.$m;
        $m++;
    }         
    case 'Non-Aggregated':
    while ($m<=$i)
    {
       echo $Blekko[$m];
       $m++;
       echo 'Results NAG: '.$m;
    }
    $m=0;
    while ($m<=$i)
    {
        echo $Faroo[$m];
        $m++;
        echo 'Results: NAG '.$m;
    }
    $m=0;
    while ($m<=$i)
    {
        echo $bing_results[$m];
        $m++;
        echo 'Results: NAG '.$m;
    }
case 'Bing':
    while ($m<=$i)
     {
        echo $bing_results[$m];
        $m++;
        echo 'Results: Bi '.$m;
    }
case 'Blekko':
    while ($m<=$i)
    {
        echo $Blekko[$m];
        $m++;
        echo 'Results: BL '.$m;
    }
case 'Faroo':
    while ($m <=$i)
    {
        echo $Faroo[$m];
        $m++;
        echo 'Results: F '.$m;
    } 
}

?>

5 个答案:

答案 0 :(得分:5)

因为您忘记了break;声明。

switch ($agg)
{
    case 'Aggregated':
        while ($m<=$i)
        {
            echo $bing_results[$m];
            echo $Faroo[$m];
            echo $Blekko[$m];
            echo 'Results AGG: '.$m;
            $m++;
        }         
        break; // this is where you need your break!
    case 'Non-Aggregated':
        while ($m<=$i)

答案 1 :(得分:2)

因为您的交换机中没有break个语句。

switch ($agg)
{
case 'Aggregated':
while ($m<=$i)
{
    echo $bing_results[$m];
    echo $Faroo[$m];
    echo $Blekko[$m];
    echo 'Results AGG: '.$m;
    $m++;
}
break;

答案 2 :(得分:2)

如果您不希望代码也运行下一个案例,则需要在下一个break;之前使用case

    $m++;
}
break; //here
case 'Non-Aggregated':

请记住也要为其他人重复。

答案 3 :(得分:0)

break;

它就像是开关的希格斯玻色子粒子,用于,foreach和while循环。

当使用没有中断的开关时,它会找到匹配的开关并继续前进。 所以,想象你的价值是2:

$i = 0;

switch($value) {
    case 1:
        $i += 1;
    case 2:
        $i += 2;
    case 3:
        $i += 3;
    case 4:
        $i += 4;
}

你的值是9,因为它首先加2,然后是3然后是4(2 + 3 + 4 = 9)。

答案 4 :(得分:0)

您忘记在交换机中放置break语句。

switch ($agg)
{
case 'Aggregated':
while ($m<=$i)
{
    echo $bing_results[$m];
    echo $Faroo[$m];
    echo $Blekko[$m];
    echo 'Results AGG: '.$m;
    $m++;
}
break;