Forum Doku Wiki Blog

Forumsarchiv 2009, April
switch rückgabe fraglich

archivierte Beiträge lesen

  1. (PHP) switch rückgabe fraglich von lvl, 30. 04. 2009, 12:05

switch rückgabe fraglich

Der folgende Beitrag wurde am 30. 04. 2009, 12:05 Uhr von lvl veröffentlicht.

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

switch rückgabe fraglich

Der folgende Beitrag wurde am 30. 04. 2009, 12:22 Uhr von dedlfix veröffentlicht.

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

switch rückgabe fraglich

Der folgende Beitrag wurde am 30. 04. 2009, 12:24 Uhr von Tom veröffentlicht.

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

switch rückgabe fraglich

Der folgende Beitrag wurde am 30. 04. 2009, 12:38 Uhr von lvl veröffentlicht.

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

switch rückgabe fraglich

Der folgende Beitrag wurde am 30. 04. 2009, 12:23 Uhr von Tom veröffentlicht.

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

switch rückgabe fraglich

Der folgende Beitrag wurde am 02. 05. 2009, 11:30 Uhr von Christoph Jeschke veröffentlicht.

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

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4