Wie verwandelt man „1“ in „001“ in PHP? Komplette Anleitung mit Code
\n\nKennst du die Situation: Du möchtest die Zahl 7 ausgeben, aber der Kunde (oder die Datenbank) verlangt 007? Oder du erstellst eine Bestellnummer: 42 → 00042? Oder du arbeitest mit Datumsangaben, bei denen der Monat zweistellig sein muss: 1 → 01?
Willkommen in der Welt der führenden Nullen (leading zeros) in PHP. Das ist eine dieser Aufgaben, die einfach erscheint, aber viele Fallstricke bereithält. In diesem Artikel zeigen wir dir alle Methoden, um Nullen vor eine Zahl zu setzen, vergleichen ihre Performance und erklären, wann du welche Methode einsetzen solltest.
\n\nDieser Artikel richtet sich an Anfänger und erfahrene Entwickler. Wir kopieren nicht einfach eine Antwort von Stack Overflow, sondern erklären jedes Beispiel Schritt für Schritt. Los geht's!
\n\nWarum braucht man überhaupt führende Nullen?
\n\nFührende Nullen sind Nullen, die vor den signifikanten Ziffern einer Zahl stehen. Zum Beispiel 007 statt 7. Im echten Leben werden sie benötigt für:
- \n
- Formatierung von Nummern: Bestellungen, Rechnungen, Invoices. „Bestellung Nr. 0001“ wirkt professioneller als „Bestellung Nr. 1“. \n
- Sortierung: In Dateisystemen und Datenbanken führt eine String-Sortierung von „1“, „10“, „2“ zur falschen Reihenfolge. „01“, „02“, „10“ hingegen ist korrekt. \n
- Datum und Uhrzeit:
2023-01-05ist der ISO-8601-Standard. Ohne führende Null würde der Tag oder Monat „5“ das Format zerstören. \n - APIs und Protokolle: Viele APIs verlangen eine feste Feldlänge. \n
PHP hat keine eingebaute „Mach's-schön“-Funktion – aber es gibt mehrere mächtige Werkzeuge, die wir jetzt kennenlernen.
\n\nMethode 1: sprintf – der König der Formatierung
\n\nDie beliebteste Methode, die du auch auf Stack Overflow findest, ist die Funktion sprintf(). Sie stammt aus der Sprache C und kann Strings nach einem Muster formatieren.
Wie funktioniert das?
\n\nSyntax: sprintf(Format, Variable). Das Format wird durch spezielle Platzhalter definiert, die mit % beginnen. Für Zahlen mit führenden Nullen verwendest du %0Nd, wobei N die Gesamtlänge des Strings und d der Datentyp (ganze Zahl) ist.
<?php\n$number = 7;\n$formatted = sprintf("%03d", $number);\necho $formatted; // Ausgabe: 007\n?>\n\nDie Zeichen im Detail:
\n- \n
%– Beginn des Platzhalters \n 0– Füllzeichen für leere Stellen (Null) \n 3– Gesamtlänge des Ergebnis-Strings \n d– Ganze Zahl (decimal) \n
Ist die Zahl länger als die angegebene Länge, gibt sprintf sie einfach unverändert aus:
<?php\necho sprintf("%03d", 12345); // Ausgabe: 12345 (keine Kürzung!)\n?>\n\nArbeiten mit Dezimalzahlen
\n\nUnd wenn die Zahl keine ganze Zahl ist? Zum Beispiel 3.14 als 003.14 ausgeben? Dafür verwenden wir %0N.f:
<?php\n$float = 3.14;\necho sprintf("%06.2f", $float); // Ausgabe: 003.14\n// 6 = Gesamtlänge, 2 = Anzahl Nachkommastellen\n?>\n\nWichtig: sprintf verändert die ursprüngliche Variable nicht, sondern gibt einen neuen String zurück. Wenn du direkt ausgeben möchtest, verwende printf() (ohne das 's').
Methode 2: str_pad – der universelle „Auffüller“
\n\nDie zweitbeliebteste Methode ist die Funktion str_pad(). Sie ist nicht speziell für Zahlen gemacht, funktioniert aber hervorragend mit Strings. Und eine Zahl wird in PHP ganz einfach zu einem String.
<?php\n$number = 42;\n$formatted = str_pad($number, 5, "0", STR_PAD_LEFT);\necho $formatted; // Ausgabe: 00042\n?>\n\nParameter:
\n- \n
- Eingabe-String \n
- Ziel-Länge des Strings \n
- Füllzeichen (hier „0“) \n
- Füllrichtung:
STR_PAD_LEFT(links),STR_PAD_RIGHT(rechts) oderSTR_PAD_BOTH(beidseitig) \n