Im letzten Beitrag zu PHP habe ich den Aufbau der Arrays beschrieben. Um das Verständnis der Arrays und deren Einsatz besser zu erklären, werde ich hier einige einfache Beispiele liefern.
Als erstes stelle ich die Funktion date()
vor. Diese Funktion gibt eine formatierte Zeitangabe zurück. Je nach dem welchen Platzhalter bzw. Formatierschalter man einsetzt bekommt man verschiedene Ausgaben:
<?php
echo date("Y");
?>
Die Ausgabe wäre: 2004. Eine Auflistung dieser “Schalter” bekommt man u. a. hier und hier. Hier ein weiteres Beispiel:
<?php
echo "Heute ist " . date("l") . ", der " . date("d. F Y");
?>
Die Ausgabe wäre: Heute ist Tuesday, der 20. April 2004
An sich nicht falsch, allerdings wäre es schöner wenn die Ausgabe deutschsprachig wäre. Hierbei kommen die Arrays zum Einsatz.
<?php
$wochentag=array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
// Wochentage
$monat=array("January"=>"Januar", "February"=>"Februar", "March"=>"März", "April"=>"April", "May"=>"Mai", "June"=>"Juni", "July"=>"Juli", "August"=>"August", "September"=>"September", "October"=>"Oktober", "November"=>"November", "December"=>"Dezember");
// Monatsnamen
echo "Heute ist " . $wochentag[date("w")] . ", der " . date("d. ") . $monat[date("F")]. " " . date("Y");
?>
Die Ausgabe wäre: Heute ist Dienstag, der 20. April 2004
Nun zu der Erklärung. Als erstes habe ich Wochentage in einem Array (Kurzschreibweise) untergebracht. Sonntag hat einen Indexwert von 0 und Samstag einen Indexwert von 6. Das ist gut, denn date("w")
(hierbei nicht, wie ich, die Anführungszeichen vergessen *g*) gibt mir Zahlen von 0-6 raus (Sonntag bis Samstag).
Als zweites habe ich ein assoziativen Array mit Monatsnamen gemacht, denn date("F")
gibt engische Monatsnamen raus. Es gäbe eine weitere Möglichkeit das Monatsnamen-Problem zu lösen:
<?php
$monat=array(); //Anmerkung von Garvin
$monat[1]="Januar";
$monat[2]="Februar";
$monat[3]="März";
$monat[4]="April";
$monat[5]="Mai";
$monat[6]="Juni";
$monat[7]="Juli";
$monat[8]="August";
$monat[9]="September";
$monat[10]="Oktober";
$monat[11]="November";
$monat[12]="Dezember";
echo $monat[date("n")];
?>
Hierbei musste ich die Indexierung selber vornehmen, da date("n")
Werte zwischen 1-12 liefert. Mir ist schon irgendwie klar, daß es für die deutschsprachige Datumsasugabe bestimmt eine elegantere Lössung gibt.
Array-Elemente mit count() zählen
Die Funktion count()
erlaubt uns die Array-Elemente zu zählen. Hier ein Beispiel:
<?php
$wochentag=array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
// Wochentage
$monat=array("January"=>"Januar", "February"=>"Februar", "March"=>"März", "April"=>"April", "May"=>"Mai", "June"=>"Juni", "July"=>"Juli", "August"=>"August", "September"=>"September", "October"=>"Oktober", "November"=>"November", "December"=>"Dezember");
// Monatsnamen
echo "Heute ist " . $wochentag[date("w")] . ", der " . date("d. ") . $monat[date("F")]. " " . date("Y") . "<br />\n";
echo "Die Woche hat " . count($wochentag) . " Tage und das Jahr hat " . count($monat) . " Monate";
?>
Die Ausgabe würde so aussehen:
Heute ist Dienstag, der 20. April 2004
Die Woche hat 7 Tage und das Jahr hat 12 Monate
@Garvin &Martin, evtl. könntet ihr mir an diesen Beispielen erklären ob eher "
oder '
angebrachter wären.
Wir arbeiten seit 20 Jahren mit WordPress und bieten diverse Dienstleistungen rund um das System an. Kontaktiere uns für weitere Informationen oder für ein Angebot.
[…] g. Zum Abschluss der kleinen “Reihe” gibt es heute drei Beiträge zu PHP. 1) PHP-lernen 7.1: deutschsprachiges Datum Im letzten Beitrag zu PHP […]
In den obigen Beispiel haben sich leider einige Fehler eingeschlichen:
echo date(Y);
– sollte heißen (mit anführungszeichen):
echo date(‘Y’);
echo “Heute ist ” . date(“l”); . “, der ” . date(“d. F Y”);
– sollte heißen (ohne zusätzliches semikolon):
echo “Heute ist ” . date(“l”) . “, der ” . date(“d. F Y”);
Der Hinweis auf eine “irgendwie deutsche Ausgabe” ließe sich wie folgt verwirklichen:
setlocale(LC_ALL, ‘de_DE@euro’, ‘de_DE’, ‘de’, ‘ge’);
echo ‘Heute ist ‘ . strftime(‘%A, der %d.%B %Y’);
Wobei setlocale je nach PHP-Version eventuell leicht anders aussehen kann. Noch schöner wäre übrigens folgende Ausgabe:
printf(
‘Heute ist %s, der %s’,
strftime(‘%A’),
strftime(‘%d.%B %Y’)
);
denn damit kann man sich die ganze hässliche Stringconcatenation etwas sparen.
Was die Anführungszeichen angeht: Durchgängig hätten in deinen Beispielen einfache ‘ Anführungszeichen ausgereicht. Ich persönlich finde sie auch einfacher zu lesen, da es nur ein Strich anstelle zweier ist und so den Code nicht so verwustelt. 🙂
HTH,
Garvin. 🙂
Hi Garvin,
ich habe deine beiden Beispiele ausprobiert und bei mir funzen die nicht. Wo und wie muss ich deine Beispiele einbinden?
Zu dem Semikolon: irgendwie habe ich das Gefühl, daß WP ab und an Zeichen zufügt. Denn sonst kann ich es mir nicht erklären, da ich die längeren Beispiele aus dem Editor rauskopiere.
Als ich das erste mal diesen Beitrag abgesendet habe, hat mir WP mehr oder weniger alles zerschossen. Es sah aus wie Kraut und Rüben 🙂
Alternativ könnte man die Monate auch so anlegen:
$monat = array(1=>'Januar','Februar','März','...','Dezember');
Durch das 1=> wird der Januar dem Index 1 und nicht 0 zugewiesen. Möglich sind so auch Lücken, hier als Beispiel das ganze ohne Februar:
$monat = array(1=>'Januar',3=>'März','April','...','Dezember');