Frage

Ich verstehe nicht, was hier passiert. Logischerweise macht es keinen Sinn für mich.

<?php
$level = 0;

switch ($level) {

  case $level > 80: $answer = 'high'; break;
  case $level > 60: $answer = 'moderate-to-high'; break;
  case $level > 40: $answer = 'moderate'; break;
  case $level > 20: $answer = 'low-to-moderate'; break;
  default: $answer = 'low'; break;
}   
echo $answer;
?>

Wenn $ Ebene == 0, es "hoch" zurückgibt. Das macht keinen Sinn für mich. Kann jemand erklären, was hier passiert?

War es hilfreich?

Lösung

Ändern switch ($level) switch (true) und dies funktionieren wird.

switch Aussagen führen Gleichheitstests auf den Werten in den Fällen. PHP ist die Bewertung Ihrer > Vergleiche, so case $level > 80 wird case false. false gilt als gleich 0 sein, so dass der erste Fall entspricht.

Andere Tipps

Die Menge nach dem case muss nur der Wert, kein boolean Ausdruck. Ich vermute, dass PHP case $level > 80 als case ($level > 80) prüft die case 0 immer (das heißt, falsch, da $level ist in der Tat nicht weniger als 80) und so sind Sie den ersten Fall entsprechen.

Wie andere haben darauf hingewiesen, sie können nicht Schalter wie das, aber wie wäre es wie folgt definieren:

<?
$level = 21;
$answers = array('low', 'low-to-moderate',
                 'moderate', 'moderate-to-high', 'high');

echo $answers[intval(($level-1)/20)];
?>

Hinweis : Wenn $ level = 0 , dann Ausdruck in intval () wird -1/20 , , die weniger als -1 ist und daher abgerundet wird 0 .

Das ist nicht wirklich wie Schalter verwendet werden soll. Es ist für einen bestimmten Wert zu bewerten.

Verwenden Sie eine If / else hier, wenn statt Ihr Leben zu komplizieren einen Schalter Arbeit wie möglich zu gestalten.

Sind Sie sicher, dass Sie dies in PHP tun können?

Ich habe gerade überprüft die Anleitung Schalter und Sie haben einen eindeutigen Wert zu liefern.

Ich denke, wenn man es wieder in so etwas wie schreiben:

$levelDivTwenty = intval($level/20);
$levelDivTwenty = ($levelDivTwenty>4)?4:$levelDivTwenty;

und dann Fall, dass auf.

switch ($levelDivTwenty) {
  case 4: //same as $level > 80 before...
  case 3: //>60 etc...
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top