2013-07-19 84 views
0

我試圖調試這個聚合循環,並且我發現在案例一完成後,「Aggregated」會結束,並執行第二種情況'Non-Aggregated'。任何想法爲什麼發生這種情況?爲什麼這個switch語句滿足兩種情況?

<?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; 
    } 
} 

?> 
+0

你不會在任何地方突破switch語句。因此,如果只是最後一種情況,那麼多個案例將運行。 – JimL

回答

5

因爲您忘記了您的break;聲明。

​​
+0

我'忘了',是的。謝謝! – the5thace

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

您需要使用break;下一case之前,如果你不想要的代碼到下一個情況下很好地運行。

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

記住重複換了別人,太。

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)。

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; 
相關問題