Php Platzhalter - was bedeutet dieser code?

Hallo,

ich habe folgendes Beispiel:

<?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

Hallo makko_1982,

Ich verstehe leider nicht was genau da in Zeile 5 und 7
gemacht wird. Kann mir das bitte jemand erklären?

Klaro :smile:

Bei den beiden Zeilen handelt es sich um Format-Anweisungen für die printf-Funktion (siehe auch http://www.php.net/manual/de/function.sprintf.php)

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)

$text = „Today’s date is %3$04d-%2$02d-%1$02d.“;

%3$04d 3. Variable (=Jahr) als Dezimalzahl ausgeben (immer 4 Stellen lang)
%2$02d 2. Variable (=Monat) als Dezimalzahl ausgeben (inkl. führende 0)
%1$02d 1. Variable (=Tag) als Dezimalzahl ausgeben (inkl. führende 0)

printf($text,$tag,$monat,$jahr);

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.

Gruss Odi