Facebook
Twitter
Google+
Kommentare
0

Funktion der Woche: printf()

printf()

Diese Funktion gibt einen String aus, im Gegensatz zu “echo” kann man diesen aber formatieren. Und genau deswegen erkläre ich printf() zur Funktion der Woche!

Wofür könnte ich diese Funktion gebrauchen?

Wie schon oben erwähnt, kann man Strings mit printf() formatieren. So ist es zum Beispiel möglich, eine Zahl immer mit zwei Nachkommastellen ausgeben, oder einen Integer in Binär- oder Hexadezimaldarstellung zu formatieren…

Natürlich kann man auch String mit printf() sehr schön formatieren, dazu aber in den Beispielen mehr…

Beispiele

$i = 837401;
$f = 473.9273;

printf("Float: %f \n", $f);
printf("Float mit zwei Nachkommastellen: %.2f \n", $f);
printf("Float mit drei Nachkommastellen: %.3f \n", $f);
printf("Hexadezimal: %x \n", $i);
printf("Hexadezimal mit Grossbuchstaben: %X \n", $i);
printf("Binärdarstellung: %b \n\n", $i);

$s = "DeDu";
$s2 = "Langer Text, den man irgendwann abschneiden sollte...";
printf("[%s] <- Normale Ausgabe \n", $s);
printf("[%8s] <- Rechtsbündige Ausgabe \n", $s);
printf("[%-8s] <- Linksbündige Ausgabe \n", $s);
printf("[%'#8s] <- Linksbündige Ausgabe mit Benutzerdefiniertem Auffüllzeichen \n", $s);
printf("Text abschneiden nach 20 Zeichen: %.20s\n", $s2);

Ergibt folgende Ausgabe:

Float: 473.927300
Float mit zwei Nachkommastellen: 473.93
Float mit drei Nachkommastellen: 473.927
Hexadezimal: cc719
Hexadezimal mit Grossbuchstaben: CC719
Binärdarstellung: 11001100011100011001

[DeDu] <- Normale Ausgabe
[    DeDu] <- Rechtsbündige Ausgabe
[DeDu    ] <- Linksbündige Ausgabe
[####DeDu] <- Linksbündige Ausgabe mit Benutzerdefiniertem Auffüllzeichen
Text abschneiden nach 20 Zeichen: Langer Text, den man

Hä?

Schauen wir uns das doch mal genauer an. Als ersten Parameter geben wir bei printf() immer einen String mit. In diesem String können wir mit dem Prozentzeichen Platzhalter definieren, welche dann ersetzt werden. Wie diese Platzhalter aber genau ersetzt werden, können wir steuern. Zum Beispiel mit der Typenangabe: Mit %d kann ich einen Integer ausgeben. Wenn ich nun dieses “d” mit “b” ersetze, wird der selbe Integer als Binär-Wert herausgeschrieben. Weiteres findet man in der offiziellen Doku.

Natürlich müssen  den Wert angeben, der als Basis zum ersetzen der Platzhalter verwendet wird. Diese Werte müssen wir als weitere Parameter bei printf() angeben. Zu beachten ist, dass man dies in der exakt selben Reihenfolge tun muss, wie man die Werte im Formatierungs-String verwendet. Ein Beispiel:

$string = "DeDu";
$laenge = strlen($string);
printf("Der String '%s' ist %d Zeichen Lang.\n", $string, $laenge);

Ergebnis: Der String ‘DeDu’ ist 4 Zeichen Lang.

Falls man die Argumente nicht in der exakten Reihenfolge angeben kann, will, oder man einen Wert mehrmals benötigt, ist auch folgendes möglich:

$string = "DeDu";
$laenge = strlen($string);
printf('Der String \'%s\' ist %d Zeichen Lang. Die Zahl %2$d als Binär-Wert ist: %2$b', $string, $laenge);

Ausgabe: Der String ‘DeDu’ ist 4 Zeichen Lang. Die Zahl 4 als Binär-Wert ist: 100

Wie man sieht, kann ich mit “2$” den zweiten Wert (aber das dritte Argument!) ansprechen. Wichtig ist, dass man hier den Formatierungs-String in einfache Anführungszeichen setzt! Ansonsten versucht PHP bei z.B. “%2$d” die Variable $d einzusetzen…

Weiteres

Falls man das Ergebnis von printf() nicht ausgeben, sondern zurückgeben will, kann man sprintf() verwenden. Mit fprintf() kann man den String in einen Stream schreiben…

Über den Autor

DeDu

Link erfolgreich vorgeschlagen.

Vielen Dank, dass du einen Link vorgeschlagen hast. Wir werden ihn sobald wie möglich prüfen. Schließen