Führende Nullen in PHP: Warum sie wichtig sind und wie man Fehler vermeidet
\n\nStellen Sie sich vor: Sie programmieren einen Online-Shop und müssen eine Bestellnummer anzeigen. Der Kunde sieht „Bestellung Nr. 42“ und daneben „Bestellung Nr. 7“. Das sieht unordentlich aus, oder? Da möchte man sofort „Bestellung Nr. 00042“ und „Bestellung Nr. 00007“ daraus machen. Oder Sie arbeiten mit Daten: Der Monat Januar sollte 01 sein, nicht einfach 1. Genau hier kommen führende Nullen in PHP ins Spiel.
Die Frage „Formatting a number with leading zeros in PHP“ ist eine der beliebtesten auf Stack Overflow. Tausende Entwickler suchen nach einer Antwort, wie man aus der Zahl 5 die 005 oder aus 42 die 0042 macht. Es scheint eine Kleinigkeit zu sein, aber ohne den richtigen Ansatz kann es zu Fehlern kommen, insbesondere bei der Arbeit mit Datenbanken oder APIs.
\n\nIn diesem Artikel zeige ich Ihnen 4 funktionierende Methoden, um führende Nullen zu einer Zahl in PHP hinzuzufügen. Sie erfahren, wie sich sprintf von str_pad unterscheidet, wann Sie printf verwenden sollten und warum das gute alte substr ebenfalls hilfreich sein kann. Los geht's!
Methode 1: sprintf – der König der Formatierung
\n\nDie Funktion sprintf ist wohl die eleganteste Methode, um diese Aufgabe zu lösen. Sie stammt aus der Sprache C und kann Strings nach einem Muster formatieren. Für führende Nullen wird der Formatbezeichner %0Nd verwendet, wobei N die Gesamtlänge der Zahl inklusive Nullen ist.
Basisbeispiel
\n<?php\n$number = 7;\n$formatted = sprintf("%05d", $number);\necho $formatted; // Gibt aus: 00007\n?>\n\n\nLassen Sie uns das Muster "%05d" analysieren:
- \n
%– Beginn des Formatbezeichners \n0– Auffüllen mit Nullen, nicht mit Leerzeichen \n5– Gesamtlänge des Strings (5 Zeichen) \nd– Ganzzahl (dezimal) \n
Arbeiten mit negativen Zahlen
\nBeachten Sie: Wenn die Zahl negativ ist, erscheinen die führenden Nullen nach dem Minuszeichen:
\n<?php\n$number = -42;\necho sprintf("%05d", $number); // Gibt aus: -0042\n?>\n\n\nDynamische Länge
\nWenn die gewünschte Länge nicht im Voraus bekannt ist, können Sie * im Muster verwenden:
<?php\n$number = 123;\n$length = 8;\necho sprintf("%0{$length}d", $number); // Gibt aus: 00000123\n// Oder mit *\necho sprintf("%0*d", $length, $number); // Gibt aus: 00000123\n?>\n\n\nVorteile: Flexibilität, Lesbarkeit, Unterstützung verschiedener Datentypen.
\nNachteile: Man muss die Syntax der Formatbezeichner kennen.
Methode 2: str_pad – Einfachheit und Übersichtlichkeit
\n\nDie Funktion str_pad arbeitet auf String-Ebene. Sie nehmen die Zahl, wandeln sie in einen String um und „ergänzen“ ihn links mit Nullen bis zur gewünschten Länge. Das ist auch für Anfänger intuitiv verständlich.
Syntax
\n<?php\n$number = 7;\n$formatted = str_pad($number, 5, "0", STR_PAD_LEFT);\necho $formatted; // Gibt aus: 00007\n?>\n\n\nParameter:
\n- \n
$number– Eingabestring (die Zahl wird automatisch konvertiert) \n5– gewünschte Länge des Ergebnisses \n"0"– Zeichen zum Auffüllen \nSTR_PAD_LEFT– links auffüllen (es gibt auchSTR_PAD_RIGHTundSTR_PAD_BOTH) \n
Wichtiger Hinweis: Wenn die Zahl länger ist
\nWenn die ursprüngliche Zahl bereits länger als die angegebene Länge ist, gibt str_pad sie einfach unverändert zurück:
<?php\necho str_pad(123456, 3, "0", STR_PAD_LEFT); // Gibt aus: 123456 (wird nicht abgeschnitten!)\n?>\n\n\nVergleich mit sprintf
\n<?php\n$number = 42;\necho sprintf("%05d", $number); // 00042\necho str_pad($number, 5, "0", STR_PAD_LEFT); // 00042\n// Das Ergebnis ist identisch, aber der Code liest sich anders\n?>\n\n\nVorteile: Offensichtliche Syntax, man muss sich keine Formatbezeichner merken.
\nNachteile: Funktioniert nur mit Strings, keine eingebaute