Switchanweisung als Schleife möglich?

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
exweised
Mitglied
Beiträge: 123
Registriert: 22.05.2004 17:28

Switchanweisung als Schleife möglich?

Beitrag von exweised »

Kann man eine Switchanweisung auch in eine Schleife packen?

Ich habe hier mal ein einfaches Script, wo ich die Switchanweisung in eine Schleife packen wollte. Bekomme aber eine Fehlermeldung. Ist was an dem Beispiel falsch oder ist das einfach so nicht möglich?

Code: Alles auswählen

<?php
	$kategorie = array(
		"1" => "Obst",
		"2" => "Gemüse",
		"3" => "Käse",
		"4" => "Wurst",
		"5" => "Teigwaren",
		"6" => "Gewürze"
	);
?>

<form action="test.php" method="get">
Sie haben die Wahl zwischen<br>

<?php

	foreach( $kategorie as $key => $value )
	{
		echo "<input type=\"radio\" name=\"val\" value=" . $key . ">" . $value . "<br>\n";
	}

?>

<input type="submit">
</form>

<?php

switch ($_GET["val"])
{
	foreach( $kategorie as $key => $value )
	{
		case $key:
		echo "Sie haben " . $value . " ausgewählt!<br>\n";
		break;
	}
  default:
    echo "Sie haben bisher nichts ausgewählt!";
    break;
}

?>
Fehlermeldung ist folgende:
Parse error: parse error, unexpected T_FOREACH, expecting T_CASE or T_DEFAULT or '}' in test.php on line 31
Zeile 31 ist die besagte Schleife in der Switchanweisung.
Benutzeravatar
Amlor
Mitglied
Beiträge: 527
Registriert: 28.01.2003 12:51
Wohnort: gelsenkirchen
Kontaktdaten:

Beitrag von Amlor »

<?

Code: Alles auswählen

for ($iCount = 0; $iCount < 10; $iCount++)  {
  switch ($sCapture)  {
    case "bla":
      break;
    default:  
  }
}
   
geht.. gibt auch kein grund, warum es nicht gehen sollte.. if-anweisungen gehen ja auch und letztendlich ist es ja 'nur' ein anderes bild :D
Das Tolle daran, die einzige zwischen richtig und falsch unterscheidende Art zu sein, ist, dass wir uns immer genau die Regeln ausdenken können, die uns gerade in den Kram passen.
Douglas Adams - Die letzten ihrer Art
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

Du kannst einen Switch Block aber nicht zweckentfremden und zwischen

Code: Alles auswählen

Switch($blubb) {
//hier was anderes nehmen als
Case "wow":
break;
}
Du kannst aber ohne Probleme um den Switchblock eine Schleife verwenden solange der Block in sich geschlossen ist kein Problem ist ja nichts anderes als ein If
exweised
Mitglied
Beiträge: 123
Registriert: 22.05.2004 17:28

Beitrag von exweised »

Ah, ok. Aber sieht das jetzt so aus:

Code: Alles auswählen

foreach( $kategorie as $key => $value )
{
	switch ($_GET["val"])
	{
		case $key:
		echo "Sie haben " . $value . " ausgewählt!<br>\n";
		break;

		default:
		echo "Sie haben bisher nichts ausgewählt!";
		break;
	}
}
habe ich einige male die Standartanweisung auf dem Bildschirm.

Sieht es so aus:

Code: Alles auswählen

foreach( $kategorie as $key => $value )
{
	switch ($_GET["val"])
	{
		case $key:
		echo "Sie haben " . $value . " ausgewählt!<br>\n";
		break;
	}
}
	switch ($_GET["val"])
	{
		default:
		echo "Sie haben bisher nichts ausgewählt!";
		break;
	}
habe ich nur einmal die Standartanweisung auf dem Bildschirm, dafür aber auch immer, trotz anderer Auswahl.
:(
Benutzeravatar
k-5
Mitglied
Beiträge: 166
Registriert: 05.06.2003 23:21
Wohnort: soa kaff
Kontaktdaten:

Beitrag von k-5 »

hm .. setz ne variable in dem switch auf true .. und überprüfe ob sie am schluss gesetzt wurde .. wenn nicht wird noch default angezeigt ..

aber BITTE .. schmeiß switch raus .. und nehm dafür if ;) ..
ich will mein auto polieren ! ..

ja .. ich weiß .. man kann das mit nem lappen machen .. aber ICH will unbedingt nen hammer nehmen .. WIE geht das :)
exweised
Mitglied
Beiträge: 123
Registriert: 22.05.2004 17:28

Beitrag von exweised »

Ja, der Code von mir sollte nur als Beispiel dienen. Mein Quellcode sieht ganz anders aus. ;) Aber beinhaltet halt ein Switch und ich wollt das alles mit einer Schleife vereinfachen.
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

exweised hat geschrieben:Ja, der Code von mir sollte nur als Beispiel dienen. Mein Quellcode sieht ganz anders aus. ;) Aber beinhaltet halt ein Switch und ich wollt das alles mit einer Schleife vereinfachen.
Dann sollen diese Mehrfach ausgaben sein?

Code: Alles auswählen

echo "Sie haben " . $value . " ausgewählt!<br>\n";
wozu $key
brauchst auch noch den Array Schlüssel?
exweised
Mitglied
Beiträge: 123
Registriert: 22.05.2004 17:28

Beitrag von exweised »

Das $key diente in der Switchanweisung gleichzeitig für den case. ;)

Aber das Thema ist durch. Ich musste es jetzt doch anders lösen, da durch einer Schleife mir der Defaultwert gleich der maximalen Anzahl ausgegeben wurde. Da nützt mir die Schleife einfach doch nix.
Benutzeravatar
k-5
Mitglied
Beiträge: 166
Registriert: 05.06.2003 23:21
Wohnort: soa kaff
Kontaktdaten:

Beitrag von k-5 »

im notfall .. wenns wirklich viel arbeit erspart .. und du keinen wert auf anständigen code legst .. (es gibt eigentlich kaum was das ekelhafter ist)

stopf den ganzen code in nen string ..

und dann eval( $string );
ich will mein auto polieren ! ..

ja .. ich weiß .. man kann das mit nem lappen machen .. aber ICH will unbedingt nen hammer nehmen .. WIE geht das :)
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag von Blutgerinsel »

exweised hat geschrieben:Das $key diente in der Switchanweisung gleichzeitig für den case. ;)
Ja ok habs beim Überfliegen übersehen....
k-5 hat geschrieben: stopf den ganzen code in nen string ..

und dann eval( $string );
Und dann soll er nicht die Übersicht verlieren?
Der Befehl wird i.d.R. für aus der DB, File kommende PHP Befehle verwendet und auch nur da machen sie zumindest teilweise Sinn.

Würde hiervon aber dringenst abraten......
Antworten

Zurück zu „Coding & Technik“