Wie formatiere ich Zahlen mit 00-Präfixen in PHP?

Lesezeit: 3 Minuten

Ich versuche, Rechnungsnummern zu generieren. Sie sollten immer 4 Ziffern lang sein, mit führenden Nullen, zum Beispiel:

  • 1 -> Rechnung 0001
  • 10 -> Rechnung 0010
  • 150 -> Rechnung 0150

usw.

  • Mögliches Duplikat? — stackoverflow.com/questions/3963271/…

    – Planer

    9. Juni 2011 um 17:32 Uhr

Verwenden str_pad().

$invID = str_pad($invID, 4, '0', STR_PAD_LEFT);

  • @ Dave verwendet printf Funktionen ist hier ein ebenso gültiger Weg, aber da Rechnungs-IDs nicht als Zahlen verwendet werden (mathematisch gesehen), ist es einfach eine andere Möglichkeit, sie als Zeichenfolgen zu behandeln. Wenn es jemals nicht-numerische Rechnungs-IDs gab (z. B. “Bestellung 001F3”), dann ist es eine Zeichenfolge.

    – Schlaumeier

    9. Juni 2011 um 17:31 Uhr


  • @Wiseguy, danke, das hat sogar besser funktioniert als printf, weil ich den Zahlen auch ein Präfix hinzufügen musste, wie INV0023.

    – Mike23

    9. Juni 2011 um 17:42 Uhr

  • Ack, aber Strings können auch mit aufgefüllt werden printf('INV%04s',$something);. Andererseits: Wenn die Rechnung das einzige mit fester Breite ist, was Sie brauchen, ist diese Lösung in der Tat besser. Wenn Sie mehr Felder in einer Zeile mit fester Breite benötigen (Schreiben in Dateien mit fester Breite usw.), printf wäre wohl die bessere lösung.

    – Wrikken

    9. Juni 2011 um 17:57 Uhr


  • @ Mike23 Ah, ich verstehe. printf() gibt die Zeichenfolge tatsächlich aus (wie print oder echo tut); sprintf() funktioniert identisch aber kehrt zurück die Zeichenfolge, anstatt sie zu drucken. Sie möchten sprintf().

    – Schlaumeier

    10. Juni 2011 um 12:47 Uhr


  • @mike23 Jeder ist irgendwann mal neu. Schön zu sehen, dass du schnell lernst. 🙂

    – Schlaumeier

    10. Juni 2011 um 12:57 Uhr

Benutzer-Avatar
Chris Baker

Verwenden sprintf: http://php.net/function.sprintf

$number = 51;
$number = sprintf('%04d',$number);
print $number;
// outputs 0051


$number = 8051;
$number = sprintf('%04d',$number);
print $number;
// outputs 8051

  • vielleicht, weil ich explizit geschrieben habe, dass die Strings am Ende 4 Zeichen lang sein sollen, und du nennst zwei Beispiele mit 8 Zeichen.

    – Mike23

    10. Juni 2011 um 6:14 Uhr

  • pfft, ändere die 8 in eine 4… Ich habe das Konzept demonstriert.

    – Chris Baker

    10. Juni 2011 um 14:27 Uhr

  • ist sprintf (Speicher, CPU) schneller als str_pad und threadsicher?

    Benutzer285594

    13. Juli 2016 um 8:26 Uhr

Verwendet)printf

printf('%04d',$number);

Versuche dies:

$x = 1;
sprintf("%03d",$x);
echo $x;

Benutzer-Avatar
webjawns.com

printf() funktioniert gut, wenn Sie immer etwas drucken, aber sprintf() gibt Ihnen mehr Flexibilität. Wenn Sie diese Funktion verwenden, wird die $threshold wäre 4.

/**
 * Add leading zeros to a number, if necessary
 *
 * @var int $value The number to add leading zeros
 * @var int $threshold Threshold for adding leading zeros (number of digits 
 *                     that will prevent the adding of additional zeros)
 * @return string
 */
function add_leading_zero($value, $threshold = 2) {
    return sprintf('%0' . $threshold . 's', $value);
}

add_leading_zero(1);      // 01
add_leading_zero(5);      // 05
add_leading_zero(100);    // 100
add_leading_zero(1);      // 001
add_leading_zero(5, 3);   // 005
add_leading_zero(100, 3); // 100
add_leading_zero(1, 7);   // 0000001

Benutzer-Avatar
Sani Kamal

Verwenden Sie die str_pad Funktion

 //pad to left side of the input
$my_val=str_pad($num, 3, '0', STR_PAD_LEFT)

//pad to right side of the input
$my_val=str_pad($num, 3, '0', STR_PAD_RIGHT)

//pad to both side of the input
$my_val=str_pad($num, 3, '0', STR_PAD_BOTH)

wobei $num Ihre Nummer ist

Benutzer-Avatar
GSerg

while ( strlen($invoice_number) < 4 ) $invoice_num = '0' . $invoice_num;

  • Dies führt nur dazu, dass die Nullen entfernt werden, wenn irgendetwas in PHP sie das nächste Mal in ein int/float umwandelt. Lies mal nach php.net/manual/en/language.types.type-juggling.php um zu sehen, warum das eine schlechte Idee ist 🙂

    – SlyDave

    19. Juli 2018 um 15:12 Uhr

1284190cookie-checkWie formatiere ich Zahlen mit 00-Präfixen in PHP?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy