lvl: switch rückgabe fraglich

Hallo,
wenn ich folgender Funktion den Wert 0 übergebe, erhalte ich in meinem Array:
Mo, Montag
statt
So, Sonntag

Funktion:

  
function GermanDayOfWeek($value)  
{  
	$array = array();  
	switch($value)  
	{  
		case 1:  
		case "Mon":  
			$array["kurz"] = "Mo";  
			$array["lang"] = "Montag";  
			break;  
			  
		case 2:  
		case "Tue":  
			$array["kurz"] = "Di";  
			$array["lang"] = "Dienstag";  
			break;  
  
		case 3:			  
		case "Wed":  
			$array["kurz"] = "Mi";  
			$array["lang"] = "Mittwoch";  
			break;  
  
		case 4:			  
		case "Thu":  
			$array["kurz"] = "Do";  
			$array["lang"] = "Donnerstag";  
			break;  
  
		case 5:			  
		case "Fri":  
			$array["kurz"] = "Fr";  
			$array["lang"] = "Freitag";  
			break;  
  
		case 6:			  
		case "Sat":  
			$array["kurz"] = "Sa";  
			$array["lang"] = "Samstag";  
			break;  
			  
		case 0:  
		case 7:  
		case "Sun":  
			$array["kurz"] = "So";  
			$array["lang"] = "Sonntag";  
			break;  
			  
		default:  
			$array["kurz"] = "F";  
			$array["lang"] = "Fehler";  
	}  
	return $array;  
}  
  
print_r(GermanDayOfWeek(0));  

Warum?

--
MfG lvl
  1. echo $begrüßung;

    wenn ich folgender Funktion den Wert 0 übergebe, erhalte ich in meinem Array:
    Mo, Montag statt So, Sonntag
    case 1:
    case "Mon":
    Warum?

    Du übergibst einen Integer-Wert. Das switch hat mit "Mon" einen Stringwert zum vergleichen. Der String wird zunächst implizit in einen Integer gecastet. (int)"Mon" ergibt 0, die Bedingung stimmt. Vergleiche dazu die PHP type comparison tables. Ein Typecast des übergebenen Wertes nach String hilft. Außerdem müssen die jetzigen Integer-case-Werte als String notiert werden, sonst ergibt ein unbekannter String-Wert Sonntag statt Fehler.

    echo "$verabschiedung $name";

    1. Hello,

      Du übergibst einen Integer-Wert. Das switch hat mit "Mon" einen Stringwert zum vergleichen.

      Ach ja, an der Stelle :-)

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
    2. Ja das klingt logisch. Nach dem ich die Zahlen auch als String geschrieben habe und die übergebene Variable as String caste klappts :)

      Danke

      --
      MfG lvl
  2. Hello,

    print_r(GermanDayOfWeek('0'));

    Warum?

    Weil der Datentyp an irgendeiner Stelle in einen String umgewandelt wird.
    Frag mich nicht, warum, darüber muss ich noch einen Moment nachdenken.

    Jedenfalls funktioniert deine Switchanweisung, wenn Du ausschließlich Strings vergleichst, also auch

    case '1':

    usw. fragst. Ich habs extra mal umgebaut.

    Das Mischen von Datentypen im Übergabeparameter halte ich sowieso für etwas schmuddelig...
    Aber denken wir erst noch ein wenig drüber nach :-)

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  3. Guten Tag,

    Warum?

    Gegenfrage: Warum verwendest du nicht strftime() und setlocale()? Die dreibuchstabige Ausgabe von %a kannst du ja auf zwei Zeichen kürzen.

    Gruß
    Christoph Jeschke

    --
    Zend Certified Engineer
    Certified Urchin Admin