schleifen und functionen nicht kompatibel?

ruNN0r

Erfahrenes Mitglied
hi ich habe in eine schleife die aktivierung einer function eingebaut aber das klappt nicht.
Code:
PHP:
$m=03;
$_m=07;
function month($monat)
{
 $monat = str_replace("01","31",$monat);
 $monat = str_replace("02","28",$monat);
 $monat = str_replace("03","31",$monat);
 $monat = str_replace("04","30",$monat);
 $monat = str_replace("05","31",$monat);
 $monat = str_replace("06","30",$monat);
 $monat = str_replace("07","31",$monat);
 $monat = str_replace("08","31",$monat);
 $monat = str_replace("09","30",$monat);
 $monat = str_replace("10","31",$monat);
 $monat = str_replace("11","30",$monat);
 $monat = str_replace("12","31",$monat);
 return $monat;
}
$zaehler<$m;    
while($zaehler<$_m){
      $tage = month("$zaehler");
      echo"$tage<br>";
      $zaehler++;
}
Ich hatte mir jetzt vorgestellt das er folgendes ausgibt:
31
30
31
30
er gibt aber dies aus:
31
4
5
6

anscheinend wird die function nur einmal ausgeführt aber warum und wie kann ich das ändern?
P.S. das mit der while kann man auch als for machen aber die hatte ich davor und hatte keine lust das alles nochmal zu ändern ;)
 
Das Problem ist die fuehrende 0. Nach $zaehler++ faellt diese Weg. Aus 03 wird dadurch 4.
Schau Dir mal sprintf() an, damit kannst Du dafuer sorgen, dass die uebergebene Zahl immer 2-stellig ist, also bei Bedarf eine fuehrende 0 hat.

Nachtrag: Mir wurde per PN noch ein Vorschlag unterbreitet in dem Du einfach mit switch() ... case arbeiten kannst.
In beiden Faellen, also Deiner Version und der nun vorgeschlagenen seh ich nur das Schaltjahr-Problem, denn offensichtlich geht es ja um die Anzahl Tage die ein Monat hat.
Wenn es dabei um ein konkretes Jahr (dieses Jahr, naechstes Jahr, 1978, etc.) geht dann solltest Du besser mit den Datumsfunktionen arbeiten.
Allgemein kann ich nur sagen, dass diese String-Ersetzerei doch recht suboptimal ist.

Und weiterhin moechte ich Dich noch bitten Dich an Gross- und Kleinschreibung zu halten.
 
Zurück