2010-02-13 6 views
6

Sorry für vielleicht dumme Frage, aber ich habe ein großes Problem mit einem Fall, wenn ich eine int-Variable mit einem Wert von 0 (Null) habe.0 im Schaltergehäuse?

  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; 

Switch weiter, aber hier ist mein Problem, in diesem Stück Code.

Wenn ich setzte nicht „Fall (0):“ und diese verwenden:

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

Dann der Fall, dass nächste ist irgendwie aktiv werden, und es wird gedruckt, dass „$ eko_taksa = 667;“.

Das ist alles Problem, wenn "$ starost_vozila = 0", aber wenn es eine Zahl kleiner als 6 ist als dieser Fall oben funktioniert.

Jede Var hier ist Int. Alles funktioniert gut, außer wenn "$ starost_vozila = 0" und wenn ich verwende "case ($ starost_vozila> = 0 & & $ starost_vozila < 6):".

Ich habe keine Ahnung, was auf ... Oo wird

Sorry, wenn diese dumme Frage ist. :(

+1

// Offtopic Meine persönliche Beratung zu verwenden ist Englisch Wörter zu verwenden, wenn die Benennung von Variablen. Zum Beispiel verstehe ich sie, aber wahrscheinlich die meisten Besucher hier - nicht. Es ist jedoch eine gute Übung. Sys Zdrave! :) – anthares

+0

Ran in einer ähnlichen Situation, knallte meinen Kopf gegen die Wand und fand dies. Vielen Dank für die Veröffentlichung. – pal4life

Antwort

6

Switch-Fälle nehmen keine Anweisungen, die ausgewertet werden müssen.Sie nehmen einfache Strings, Boolesche Werte oder Zahlen verglichen werden gegen

so sagen, Sie haben

$x = 0 

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

Sie diesen Fall erwarten zu laufen, aber es funktioniert nicht und ist hier, warum

($x < 10) ausgewertet true so, was Sie tatsächlich haben, ist:

$x = 0 

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

0 != true so der Fall fai ls

benötigen Sie

if() { 

} else if() { 

} else { 

} 
+0

Danke! Genau das, was ich finden musste, hörte und machte alles klar. :) – Gavrisimo

+0

Gern geschehen GaVrA – meouw

+0

Danke für die Antwort, Wie in der Frage erwähnt funktioniert es für alle, wenn der Wert 0 ist, also ist es in Ordnung, Switch Case für alle anderen Fälle zu verwenden und wenn sonst nur, wenn es 0 ist . Vielen Dank. – pal4life

0

Verwenden von Switch ist wie == in "if-Anweisung" und nicht === (prüft nicht auf Typ.) Nur leere Zeichenfolge oder NULL würde zu einer Ganzzahl 0 führen - außer dass sie berücksichtigt werden String 0.

3

Sie sind die switch falsch mit

Ihr Code wie folgt verstanden:..

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

Zum Beispiel ($starost_vozila < 6) wird sich entweder TRUE oder FALSE$starost_vozila == ($starost_vozila < 6) vergleicht $starost_vozila mit TRUE oder FALSE, was nicht das ist, was Sie tun möchten.

Ich empfehle in diesem Fall if/elseif statt switch. Zum Beispiel:

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