2010-02-13 10 views
6

Lo siento por una pregunta tonta, pero tengo un GRAN problema con un caso cuando tengo una variable int con valor de 0 (cero).0 en la caja del interruptor?

  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; 

Cambiar continuar más, pero aquí está mi problema, en este fragmento de código.

Si yo no poner "caso (0):" y utilizar esto:

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

Entonces el caso de que se encuentra al lado de alguna manera se activará y se imprimirá que "$ eko_taksa = 667;".

Eso es todo un problema cuando "$ starost_vozila = 0", pero cuando se trata de cualquier número menor que 6 que este caso anterior funciona.

Cada var aquí es int. Todo funciona bien excepto cuando "$ starost_vozila = 0" y cuando uso "case ($ starost_vozila> = 0 & & $ starost_vozila < 6):".

que no tienen idea de lo que está pasando ... Oo

Lo siento si esto es pregunta tonta. :(

+1

// offtopic Mi consejo personal es el uso de palabras inglesas al nombrar las variables. Por ejemplo, los entiendo, pero probablemente la mayoría de los visitantes aquí no. Sin embargo, es una buena práctica. Sys Zdrave! :) – anthares

+0

Corrí en una situación similar, golpeé mi cabeza contra la pared y encontré esto. Muchas gracias por publicar. – pal4life

Respuesta

6

Los conmutadores no aceptan declaraciones que deban evaluarse.Toman simples cadenas, booleanos o números para ser comparados con

por lo que usted tiene

$x = 0 

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

usted está esperando ese caso para funcionar pero no es así y por eso

($x < 10) evalúa a true aquí así que lo que realmente tiene es:

$x = 0 

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

0 != true lo que el caso fai ls

es necesario utilizar

if() { 

} else if() { 

} else { 

} 
+0

Gracias! Justo lo que necesitaba encontrar escuche y deje todo en claro. :) – Gavrisimo

+0

De nada, GaVrA – meouw

+0

Gracias por la respuesta, como se menciona en la pregunta, funciona para todos cuando el valor es 0, por lo que está bien usar la caja del conmutador para todos los demás casos y usar de lo contrario cuando su 0 . Gracias. – pal4life

0

usando Switch es como == en "if statement" y no === (no busca el tipo) .Sólo la cadena vacía o NULL daría como resultado un Entero 0 - aparte de eso, se consideran 0. cadena

3

está utilizando el switch incorrectamente

Su código se entiende así:..

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

Por ejemplo, ($starost_vozila < 6) se convertirá en cualquiera TRUE o FALSE$starost_vozila == ($starost_vozila < 6) está comparando $starost_vozila con TRUE o FALSE, que no es lo que desea hacer.

Sugiero usar if/elseif en lugar de switch en este caso. Por ejemplo:

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