2010-02-13 31 views
6

對不起,也許愚蠢的問題,但我有一個情況下,當我有一些值爲0(零)的int變量的巨大問題。0在開關櫃中?

  switch ($starost_vozila){ 
       case (0): 
        switch ($podaci['tip_motora']){ 
         case ("motor1"): 
          $eko_taksa = 485; 
         break; 
         case ("motor2"): 
          $eko_taksa = 243; 
         break; 
         case ("motor3"): 
          $eko_taksa = 121; 
         break; 
         case ("motor4"): 
          $eko_taksa = 194; 
         break; 
        } 
       break; 
       case ($starost_vozila < 6): 
        switch ($podaci['tip_motora']){ 
         case ("motor1"): 
          $eko_taksa = 485; 
         break; 
         case ("motor2"): 
          $eko_taksa = 243; 
         break; 
         case ("motor3"): 
          $eko_taksa = 121; 
         break; 
         case ("motor4"): 
          $eko_taksa = 194; 
         break; 
        } 
       break; 
       case ($starost_vozila > 5 && $starost_vozila < 11): 
        switch ($podaci['tip_motora']){ 
         case ("motor1"): 
          $eko_taksa = 667; 
         break; 
         case ("motor2"): 
          $eko_taksa = 273; 
         break; 
         case ("motor3"): 
          $eko_taksa = 136; 
         break; 
         case ("motor4"): 
          $eko_taksa = 218; 
         break; 
        } 
       break; 

開關繼續更多,但這裏是我的問題,在這段代碼。

如果我不把「案(0)」,並使用此:

case ($starost_vozila >= 0 && $starost_vozila < 6): 

然後就是接下來的情況會以某種方式被激活,它會打印出「$ eko_taksa = 667;」。

當「$ starost_vozila = 0」時,這是所有問題,但是當它是小於6的任何數字比上面這種情況下的工作。

這裏的每個變量都是int。除非當「$ starost_vozila = 0」以及當我使用「case($ starost_vozila> = 0 & & $ starost_vozila < 6):」。

我不知道是怎麼回事......哦哦

很抱歉,如果這是愚蠢的問題。 :(

+1

// offtopic我個人的建議是命名變量時使用英語單詞。例如,我瞭解他們,但可能大多數訪問者 - 不。不過這是一個很好的做法。 Sys Zdrave! :) – anthares 2010-02-13 22:44:08

+0

在類似的情況下,我的頭撞在牆上,發現這一點。非常感謝你的提交。 – pal4life 2012-03-27 02:45:39

回答

6

切換案例不需要需要評估的語句。他們採取簡單的字符串,布爾或數字進行比較反對

所以說,你有

$x = 0 

switch($x) { 
    case($x < 10): 
    ... 
    break; 
} 

你期待這種情況下運行,但它不能做這裏的原因

($x < 10)評估爲true 所以你實際上得到的是:

$x = 0 

switch($x) { 
    case true: //!!! 
    ... 
    break; 
} 

0 != true這樣的情況下輝LS

你需要使用

if() { 

} else if() { 

} else { 

} 
+0

謝謝!正是我需要找到聆聽並使一切變得清晰。 :) – Gavrisimo 2010-02-13 22:51:13

+0

不客氣GaVrA – meouw 2010-02-13 23:04:16

+0

感謝您的迴應,正如問題中提到的,它值得所有人期望值爲0時,所以可以使用開關大小寫的所有其他情況下使用,如果其他情況下使用,只有當其0 。 謝謝。 – pal4life 2012-03-27 02:46:34

0

使用開關就像==在「if語句」而不是===(不檢查類型)。只有空字符串或NULL會導致整數0 - 除此之外,它們被認爲是串0

3

您正在使用switch正確

您的代碼被理解是這樣的:。

if ($starost_vozila == 0) { 
    switch ($podaci['tip_motora']){ 
     case ("motor1"): 
      $eko_taksa = 485; 
     break; 
     case ("motor2"): 
      $eko_taksa = 243; 
     break; 
     case ("motor3"): 
      $eko_taksa = 121; 
     break; 
     case ("motor4"): 
      $eko_taksa = 194; 
     break; 
    } 
} else if ($starost_vozila == ($starost_vozila < 6)) { //not what you want!!! 
    switch ($podaci['tip_motora']){ 
     case ("motor1"): 
      $eko_taksa = 485; 
     break; 
     case ("motor2"): 
      $eko_taksa = 243; 
     break; 
     case ("motor3"): 
      $eko_taksa = 121; 
     break; 
     case ("motor4"): 
      $eko_taksa = 194; 
     break; 
    } 
} else if ($starost_vozila == ($starost_vozila > 5 && $starost_vozila < 11)) { //not what you want!!! 
    switch ($podaci['tip_motora']){ 
     case ("motor1"): 
      $eko_taksa = 667; 
     break; 
     case ("motor2"): 
      $eko_taksa = 273; 
     break; 
     case ("motor3"): 
      $eko_taksa = 136; 
     break; 
     case ("motor4"): 
      $eko_taksa = 218; 
     break; 
    } 
} 

例如,($starost_vozila < 6)將成爲無論是TRUEFALSE$starost_vozila == ($starost_vozila < 6)$starost_vozilaTRUEFALSE進行比較,這不是您想要的。

在這種情況下,我建議使用if/elseif而不是switch。例如:

if ($starost_vozila == 0) { 
    ... 
} else if ($starost_vozila < 6) { 
    ... 
} else if ($starost_vozila > 5 && $starost_vozila < 11) { 
    ... 
}