Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
 
 
 

Strings formatieren mit sprintf()

Sie befinden sich: Home > Php Tutorial > Strings formatieren mit...

Strings formatieren mit sprintf()


Eintrag am:  24.09.2010
Hits / Besucher:  7082
Sprache:  Deutsch
Kategorie:  Einsteiger Tutorials
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Wer in PHP Zahlen mit einer bestimmten Anzahl an Nachkommastellen, führenden Nullen oder in einem festen Textmuster ausgeben möchte, greift zu sprintf(). Die Funktion setzt Werte in einen Format-String ein und gibt das Ergebnis als Zeichenkette zurück. Das ist deutlich flexibler als eine Verkettung mit dem Punkt-Operator und sorgt für übersichtlichen Code.

Grundlegende Syntax

Der erste Parameter von sprintf() ist der Format-String. Er enthält normalen Text und Platzhalter, die mit einem Prozentzeichen beginnen. Jeder Platzhalter wird durch den jeweils nächsten Wert ersetzt.

<?php

$name = 'Max';
$alter = 28;

$text = sprintf('Hallo %s, du bist %d Jahre alt.', $name, $alter);
echo $text;
/* Ausgabe: Hallo Max, du bist 28 Jahre alt. */
?>

In diesem Beispiel steht %s für einen String und %d für eine Ganzzahl. Die Werte werden in der Reihenfolge eingesetzt, in der sie als Parameter übergeben werden.

Die wichtigsten Platzhalter

Jeder Platzhalter beginnt mit % und endet mit einem Buchstaben, der den Datentyp bestimmt. Hier eine Übersicht der gängigsten Typen:

<?php

$zahl = 255;

echo sprintf('%d', $zahl); // 255 (Ganzzahl)
echo sprintf('%f', $zahl); // 255.000000 (Gleitkommazahl)
echo sprintf('%s', $zahl); // 255 (String)
echo sprintf('%b', $zahl); // 11111111 (Binär)
echo sprintf('%x', $zahl); // ff (Hexadezimal klein)
echo sprintf('%X', $zahl); // FF (Hexadezimal groß)
echo sprintf('%o', $zahl); // 377 (Oktal)
echo sprintf('%e', $zahl); // 2.550000e+2 (Exponential)
?>

Am häufigsten werden %s, %d und %f verwendet. Die anderen Formate sind vor allem bei technischen Ausgaben oder bei der Arbeit mit Farbcodes nützlich.

Nachkommastellen steuern mit %.Nf

Bei Gleitkommazahlen gibt sprintf() standardmäßig sechs Nachkommastellen aus. Mit der Angabe %.Nf lässt sich die Anzahl der Nachkommastellen festlegen, wobei N die gewünschte Stellenzahl ist.

<?php

$preis = 19.5;

echo sprintf('%.2f', $preis);
/* Ausgabe: 19.50 */

echo sprintf('%.0f', $preis);
/* Ausgabe: 20 (gerundet) */

echo sprintf('%.4f', $preis);
/* Ausgabe: 19.5000 */
?>

Das ist besonders bei der Ausgabe von Geldbeträgen praktisch. Mit %.2f werden immer genau zwei Nachkommastellen angezeigt, unabhängig davon, ob der Wert 19.5 oder 19.99 lautet.

Mindestbreite und führende Nullen

Zwischen dem Prozentzeichen und dem Typbuchstaben kann eine Mindestbreite angegeben werden. Der Wert wird dann bei Bedarf mit Leerzeichen aufgefüllt. Steht eine Null vor der Breitenangabe, wird stattdessen mit Nullen aufgefüllt.

<?php

$tag = 5;
$monat = 3;
$jahr = 2026;

echo sprintf('%02d.%02d.%04d', $tag, $monat, $jahr);
/* Ausgabe: 05.03.2026 */

echo sprintf('%05d', 42);
/* Ausgabe: 00042 */

echo sprintf('%10s', 'rechts');
/* Ausgabe: rechts (mit Leerzeichen aufgefüllt) */

echo sprintf('%-10s|', 'links');
/* Ausgabe: links | (linksbündig) */
?>

Das Minuszeichen vor der Breitenangabe bewirkt eine linksbündige Ausrichtung. Ohne Minus wird rechtsbündig aufgefüllt.

Praxisbeispiel: Preise ausgeben

Eine häufige Aufgabe in Webshops und Rechnungen ist die einheitliche Darstellung von Preisen. Mit sprintf() lässt sich das elegant lösen.

<?php

$netto = 84.034;
$mwst = $netto * 0.19;
$brutto = $netto + $mwst;

echo sprintf(
'Netto: %8.2f EUR' . "\n"
. 'MwSt: %8.2f EUR' . "\n"
. 'Brutto: %8.2f EUR',
$netto,
$mwst,
$brutto
);
/*
Ausgabe:
Netto: 84.03 EUR
MwSt: 15.97 EUR
Brutto: 100.00 EUR
*/
?>

Durch die feste Breite %8.2f sind alle Zahlen rechtsbündig ausgerichtet und die Dezimalpunkte stehen exakt untereinander.

Argumente per Position referenzieren

Normalerweise werden die Parameter der Reihe nach den Platzhaltern zugeordnet. Mit der Schreibweise %1$s kann ein bestimmter Parameter gezielt angesprochen werden. Die Zahl vor dem Dollarzeichen gibt die Position an (beginnend bei 1).

<?php

$vorname = 'Anna';
$nachname = 'Müller';

echo sprintf(
'%1$s %2$s (Nachname: %2$s)',
$vorname,
$nachname
);
/* Ausgabe: Anna Müller (Nachname: Müller) */
?>

Das ist vor allem bei Übersetzungen nützlich, weil in anderen Sprachen die Wort-Reihenfolge abweichen kann. Der Format-String lässt sich anpassen, ohne die Parameter-Reihenfolge zu ändern.

printf() und fprintf()

Neben sprintf() gibt es zwei verwandte Funktionen. printf() arbeitet identisch, gibt das Ergebnis aber direkt aus statt es zurückzugeben. fprintf() schreibt das formatierte Ergebnis in eine Datei oder einen Stream.

<?php

/* Direkte Ausgabe mit printf() */
printf('Heute ist der %02d.%02d.%04d', 24, 2, 2026);

/* In Datei schreiben mit fprintf() */
$datei = fopen('log.txt', 'a');
fprintf($datei, '[%s] %s' . "\n", date('H:i:s'), 'Vorgang abgeschlossen');
fclose($datei);
?>

sprintf() oder Punkt-Verkettung?

Für einfache Fälle reicht die Verkettung mit dem Punkt-Operator völlig aus. sprintf() lohnt sich vor allem dann, wenn Zahlen formatiert werden müssen, wenn derselbe Wert mehrfach eingesetzt wird oder wenn der Format-String übersichtlicher ist als eine lange Verkettungskette.

<?php

$name = 'Max';
$punkte = 7.5;

/* Verkettung */
echo $name . ' hat ' . number_format($punkte, 1)
. ' von 10 Punkten.';

/* sprintf */
echo sprintf('%s hat %.1f von 10 Punkten.', $name, $punkte);

/* Beide Zeilen geben dasselbe aus:
Max hat 7.5 von 10 Punkten. */
?>

Für die reine Zahlenformatierung mit Tausendertrennzeichen und angepasstem Dezimaltrennzeichen ist übrigens number_format() oft die bessere Wahl. Während sprintf('%.2f', 1234.5) den Wert 1234.50 liefert, erzeugt number_format(1234.5, 2, ',', '.') die im deutschen Sprachraum übliche Schreibweise 1.234,50.

 

Tags:

 

Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.