<?php // Angenommen, in $lang stehe die Sprache $x = "5";
if ($x == "5")
$text = "Heute ist der %1\$d.%2\$d.%3\$04d.";
elseif ($x == "6")
$text = "Today's date is %3\$04d-%2\$02d-%1\$02d.";
$tag = 13;
$monat = 5;
$jahr = 2009;
// Ausgabe je nach Sprache:
// de -\> Heute ist der 13.5.2009
// en -\> Today's date is 2009-05-13
printf($text,$tag,$monat,$jahr);
?\>
Ich verstehe leider nicht was genau da in Zeile 5 und 7 gemacht wird. Kann mir das bitte jemand erklären?
Vielen Dank
MfG
makko
Mit „%“ werden Platzhalter markiert, welche der Reihe nach mit den an printf übergebenen Variablen gefüllt werden. Du kannst dann über den darauffolgenden Buchstaben den Typ der Variable wählen also in deinem Beispiel jeweils „d“, was für decimal steht. Nun ist es aber so, dass bei dir zusätzlich noch Zahlen stehen. Diese sind ein Verweis auf die übergebenen Variablen. „%2$d“ gibt somit den 2. übergebenen Wert als Dezimalzahl aus.
Die Angaben mit „02“ oder „04“ sind dazu da jeweils 4 bzw. 2 Stellen auszugeben. Wird also in der Variable „1“ übergeben hat die Formatangabe „%02d“ zur Folge dass „01“ ausgebenen wird.
Nun was bedeutet das nun konkret für dein Beispiel?
$text = „Heute ist der %1$d.%2$d.%3$04d.“;
%1$d 1. Variable (=Tag) als Dezimalzahl ausgeben
%2$d 2. Variable (=Monat) als Dezimalzahl ausgeben
%3$04d 3. Variable (=Jahr) als Dezimalzahl ausgeben (immer 4 Stellen lang)
Mit dem „Trick“, dass die Reihenfolge oben geändert wird, kann weiter unten im Code trotzdem mit demselben printf-Befehl für beide Sprachen gearbeitet werden.