Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Switch-Statement funktioniert fehlerhaft

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Switch-Statement funktioniert fehlerhaft

    Hi Leute,

    ich habe ein seeeeeeeehr seltsames Problem.

    Und zwar habe ich eine Funktion getGermanDate($monat), in der der Monat als Variable weitergegeben wird und zwar in der Form 01, 02, 03 usw. bis 12.
    In meiner Funktion steht nun bloß eine einfache Switch-Anweisung:

    PHP-Code:
        PUBLIC function getGermanDate($monat){
            
            echo 
    "<br>Aktuelle Monatszahl: ".$monat;
            
            
    //Monat wird nach Zahl unterschieden
            
    switch($monat){
                    case 
    01:
                        
    $monat "Januar";
                        break;
                    case 
    02:
                        
    $monat "Februar";
                        break;
                    case 
    03:
                        
    $monat "März";
                        break;
                    case 
    04:
                        
    $monat "April";
                        break;
                    case 
    05:
                        
    $monat "Mai";
                        break;
                    case 
    06:
                        
    $monat "Juni";
                        break;
                    case 
    07:
                        
    $monat "Juli";
                        break;
                    case 
    08:
                        
    $monat "August";
                        break;
                    case 
    09:
                        
    $monat "September";
                        break;
                    case 
    10:
                        
    $monat "Oktober";
                        break;
                    case 
    11:
                        
    $monat "November";
                        break;
                    case 
    12:
                        
    $monat "Dezember";
                        break;
            }
            
    //Rückgabe des deutschen Begriffes
            
    echo "<br>monat wurde belegt mit: ".$monat;
            
            return 
    $monat;
        } 
    Komischerweise funktioniert das Ganze mit Ausnahme von August und September...
    Bei den echo-Ausgaben kommt bei der ersten jeweils 01,...08, 09, ...12 raus (also auch bei August und September eigentlich das Richtige).
    Bei der zweiten kommt jeweils der Monat als Text raus, nur bei August und September kommen die Zahlen 08 bzw. 09 raus.....

    Hat vielleicht irgendjemand eine Ahnung, wo hier das Problem liegen könnte?
    Ich hab mir den Code schon 5.000.000 mal durchgelesen und trotzdem seh ich keinen Unterschied bei den fehlerhaften Monaten.....

  • #2
    Evtl. kommt ein falscher Parameter in die Switchanweisung an? (warum auch immer)
    mit einem "default" kannste dieses Problem debuggen.
    ACHTUNG!!! SIGNATUR!!!
    PHP-Code:
    var_dump($gehirn); exit; 
    0 ??? WTF ? nervtag.de | freutag.net | friendmetr.com

    Kommentar


    • #3
      @ tigerbrezel

      Ich kann das Problem nachvollziehen, habe es gerade selbst getestet. Aus diesem Grund würde ich ebenfalls gerne wissen, wieso das so ist?!

      Kommentar


      • #4
        Wenn du in PHP in den case Bedingungen 07 z.B. schreibst wird das automatisch in 7 umgeschrieben weil es ein Integerwert ist und es keine führende Nullen gibt.

        Entweder du machst daraus Strings also "07" (wenn der übergebene Wert auch nen String ist) oder du entfernst die führende null und konvertierst $monat in einen Integer also

        PHP-Code:
        switch((int) $monat) {...} 

        Kommentar


        • #5
          @Flor1an
          Das klingt plausibel, aber wieso geht es denn bei den anderen Monaten, die auch eine "0x" haben?
          ACHTUNG!!! SIGNATUR!!!
          PHP-Code:
          var_dump($gehirn); exit; 
          0 ??? WTF ? nervtag.de | freutag.net | friendmetr.com

          Kommentar


          • #6
            Ähm nicht ganz richtig was ich geschrieben hab, eine Zahl mit führender 0 ist eine Oktalzahl! Heißt 8er System, daher funktionieren 08,09 nicht richtig. Also Lösung wie oben gilt trotzdem, führende Null wird aber nicht automatisch entfernt sondern hat ne Bedeutung

            Kommentar


            • #7
              Warum es sich ausgerechnet so verhält, weiß ich gerade auch nicht aber wenn das Strings sind, die du da übergibst, dann setze die Zahlen doch auch in den case Statements in Anführungszeichen

              PHP-Code:
              case '01'
              PHP macht manchmal seltsame Dinge beim Vergleich von Strings mit Integern

              Edit: Zu langsam.. Logisch, von 1 bis 7 sind Dezimal- und Oktalzahlen identisch, 08 und 09 existieren in dem Sinne dafür nicht.
              [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
              [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

              Kommentar


              • #8
                @Flor1an:
                Dann frage ich mich aber, warum es bei den anderen Monaten mit der führenden Null funktioniert...

                @MaiKaY:
                Mit default ergibt es dann den default-Wert bei den beiden Monaten...

                Kommentar


                • #9
                  Siehe meinen zweiten Post.

                  Kommentar


                  • #10
                    Genaugenommen macht PHP aus 08 und 08 aus o.g. Gründen:

                    PHP-Code:
                    int(0
                    [IMG]https://g.twimg.com/twitter-bird-16x16.png[/IMG][URL="https://twitter.com/fschmengler"]@fschmengler[/URL] - [IMG]https://i.stack.imgur.com/qh235.png[/IMG][URL="https://stackoverflow.com/users/664108/fschmengler"]@fschmengler[/URL] - [IMG]http://i.imgur.com/ZEqflLv.png[/IMG] [URL="https://github.com/schmengler/"]@schmengler[/URL]
                    [URL="http://www.schmengler-se.de/"]PHP Blog[/URL] - [URL="http://www.schmengler-se.de/magento-entwicklung/"]Magento Entwicklung[/URL] - [URL="http://www.css3d.net/"]CSS Ribbon Generator[/URL]

                    Kommentar


                    • #11
                      Ok, hab meine letzte Antwort geschrieben, als ich die letzten Kommentare noch nicht gelesen hatte.

                      Jetzt, wo ich alles in Anführungszeichen geschrieben habe, funktioniert's!

                      Danke vielmals!!!

                      Kommentar


                      • #12
                        wäre es nicht sinnvoller, die deutsche Datumsausgabe (wenn es sich nicht nur um die Konvertierung der Monatszahlen handelt) über setlocale() and strftime() zu regeln?

                        Kommentar


                        • #13
                          Suchen hilft.

                          Fast genau ein Jahr alt: http://www.php.de/php-einsteiger/579...anweisung.html
                          http://www.php.de/tutorials/1032-sam...tml#post364582
                          [COLOR="#F5F5FF"]--[/COLOR]
                          [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                          [COLOR="#F5F5FF"]
                          --[/COLOR]

                          Kommentar


                          • #14
                            Ok, diese Funktion kannte ich bisher noch nicht. Was soll's, jetzt lass ich's so.

                            Kommentar

                            Lädt...
                            X