Moin,
die switch-case-Konstruktion ist ja bekannt. Normalerweise vergleiche ich dabei in jedem case-Zweig den switch-Wert mit genau einem Wert. Was aber, wenn ich ihn mit mehreren Werten vergleichen will? Aus VB kenne ich z.B. die Syntax „Case 1, 2, 3“, wodurch bei allen drei Werten in diesen Zweig eingestiegen wird.
Im Prinzip scheint das auch bei PHP zu funktionieren, indem man einfach „case 1:“, „case 2:“ und „case 3:“ untereinander schreibt, obwohl es vom Aufbau her nicht ganz einleuchtend ist. Das Problem kommt aber jetzt:
Ich lasse nach dem „3“-Zweig das „break;“ weg und frage nun noch einmal einzeln nach 1, 2 und 3 ab. Dummerweise sind nun plötzlich alle Bedingunen war, so dass immer die erste von den dreien erfolgreich durchlaufen wird.
Nichts verstanden? Wundert mich nicht Hier mal ein ähnliches Beispiel, mit dem ich u.a. das getestet hatte:
Test-PHP
if (!isset($frmAction) or $frmAction == "") { $frmAction = "HUHU"; }
$arr = array(
'eins' =\> 'One',
'zwei' =\> 'Two',
'drei' =\> 'Three', // Kommentar
'vier' =\> 'Four',
'anders' =\> 'Was anderes: ' .$frmAction);
switch ($frmAction)
{
case "1":
echo $arr['eins'];
break;
case "2":
case "3":
echo "Es ist also entweder 2 oder 3 ...
";
case "2":
echo $arr['zwei'];
break;
case "3":
echo $arr['drei'];
break;
case "4":
echo $arr['vier'];
break;
default:
echo $arr['anders'];
}
?\>
Egal, ob man 2 oder 3 als Parameter verwendet - es kommt immer „Two“ dabei raus. Und wenn man das „break“ bei „2“ wegnimmt, kommt „TwoThree“ raus.
Das ist doch blöde, oder? Ich dachte, ich könnte innerhalb des switch-Blocks ein paar „gemeinsame“ Blöcke definieren, die dann im Folgenden verfeinert werden. Aber wie es aussieht, muss ich dafür separate switch-Blöcke schreiben, oder?
Falls es doch anders geht, würde ich gerne wissen, wie!
Danke und Gruß,
Kristian