Null-Pad-Ziffern in der Zeichenfolge

125

Ich muss einzelne Figuren (1 bis 9) bis (01 bis 09) gießen. Ich kann mir einen Weg vorstellen, aber er ist groß und hässlich und umständlich. Ich bin sicher, es muss einen prägnanten Weg geben. Irgendwelche Vorschläge

scunliffe
quelle

Antworten:

214

Zunächst einmal ist Ihre Beschreibung irreführend. Doubleist ein Gleitkomma-Datentyp. Vermutlich möchten Sie Ihre Ziffern mit führenden Nullen in einer Zeichenfolge auffüllen. Der folgende Code macht das:

$s = sprintf('%02d', $digit);

Weitere Informationen finden Sie in der Dokumentation von sprintf.

Konrad Rudolph
quelle
@KonradRudolph Wenn ich als digitWert als Ganzzahl diese Zeit gegeben Fehler gegeben habe, Wenn als Zeichenfolge diese Zeit übergeben kein Problem
Hiren Bhut
@ HirenBhut Nein. Ich bin 100% sicher, dass es funktioniert. Die Dokumentation sagt es. Ich habe es sogar nur für Sie getestet: gist.github.com/klmr/e1319f6d921a382e86296cce06eb7dbd
Konrad Rudolph
@KonradRudolph Bitte überprüfen Sie diesen Code gist.github.com/klmr/…
Hiren Bhut
3
@ HirenBhut Nun, das ist völlig anders und hat nichts damit zu tunsprintf . Überprüfen Sie das Format von Ganzzahlen , insbesondere den Abschnitt über Oktalziffern.
Konrad Rudolph
@KonradRudolph Ja, kann eine mögliche Lösung?
Hiren Bhut
89

Es gibt auch str_pad

<?php
$input = "Alien";
echo str_pad($input, 10);                      // produces "Alien     "
echo str_pad($input, 10, "-=", STR_PAD_LEFT);  // produces "-=-=-Alien"
echo str_pad($input, 10, "_", STR_PAD_BOTH);   // produces "__Alien___"
echo str_pad($input, 6 , "___");               // produces "Alien_"
?>
LeppyR64
quelle
67

Lösung mit str_pad :

str_pad($digit,2,'0',STR_PAD_LEFT);

Benchmark auf PHP 5.3

Ergebnis str_pad: 0.286863088608

Ergebnis sprintf: 0.234171152115

Code:

$start = microtime(true);
for ($i=0;$i<100000;$i++) {
    str_pad(9,2,'0',STR_PAD_LEFT);
    str_pad(15,2,'0',STR_PAD_LEFT);
    str_pad(100,2,'0',STR_PAD_LEFT);
}
$end = microtime(true);
echo "Result str_pad : ",($end-$start),"\n";

$start = microtime(true);
for ($i=0;$i<100000;$i++) {
    sprintf("%02d", 9);
    sprintf("%02d", 15);
    sprintf("%02d", 100);
}
$end = microtime(true);
echo "Result sprintf : ",($end-$start),"\n";
Alex
quelle
0

Die Leistung von str_padhängt stark von der Länge der Polsterung ab. Für eine gleichmäßigere Geschwindigkeit können Sie str_repeat verwenden .

$padded_string = str_repeat("0", $length-strlen($number)) . $number;

Verwenden Sie für eine bessere Leistung auch den Zeichenfolgenwert der Zahl.

$number = strval(123);

Getestet auf PHP 7.4

str_repeat: 0.086055040359497   (number: 123, padding: 1)
str_repeat: 0.085798978805542   (number: 123, padding: 3)
str_repeat: 0.085641145706177   (number: 123, padding: 10)
str_repeat: 0.091305017471313   (number: 123, padding: 100)

str_pad:    0.086184978485107   (number: 123, padding: 1)
str_pad:    0.096981048583984   (number: 123, padding: 3)
str_pad:    0.14874792098999    (number: 123, padding: 10)
str_pad:    0.85979700088501    (number: 123, padding: 100)
Cray
quelle