Ich wollte nur hinzufügen: str_pad ist keine Option mit negativen Zahlen
wtf8_decode
6
Nur um das zu ergänzen, was wtf8_decode gesagt hat; Negative Zahlen hätten keine führenden Nullen und sie sind keine positiven Zahlen. dh 08 wird als solches geschrieben oder als etwas, das eine positive zweistellige Zahl erwartet (Bankkontosortiercode usw.). Bitte korrigieren Sie mich, wenn ich falsch liege, aber soweit ich weiß, gibt es keinen realen Fall, in dem eine führende Null für einen negativen Wert erforderlich ist.
guyver4mk
3
Wollte hinzufügen, dass, sprintf('%+03d:00 UTC',$i)wo $i-12 bis 12 ist, + oder - nach Bedarf druckt und auch führende Nullen für Zahlen mit weniger als 2 Ziffern setzt. Ideal zum Erstellen einer Zeitzone SELECTin HTML.
Wäre besser mit einem Beispiel oder mehr Erklärungen, als nur die Manpage für sprintf () zu verlinken.
Jharrell
13
Einfache Antwort
$p =1234567;
$p = sprintf("%08d",$p);
Ich bin mir nicht sicher, wie ich den Kommentar "Es wird nie mehr als 8 Stellen haben" interpretieren soll und ob er sich auf die Eingabe oder die Ausgabe bezieht. Wenn es sich auf die Ausgabe bezieht, müssten Sie einen zusätzlichen Aufruf von substr () haben, um die Zeichenfolge zu beschneiden.
Wenn die Eingabenummern immer 7 oder 8 Stellen haben, können Sie auch verwenden
$str =($input <10000000)?0. $input : $input;
Ich habe einige Tests durchgeführt und festgestellt, dass dies doppelt so schnell sein würde wie str_padoder sprintf.
Wenn die Eingabe eine beliebige Länge haben kann, können Sie sie auch verwenden
$str = substr('00000000'. $input,-8);
Dies ist nicht so schnell wie das andere, sollte aber auch etwas schneller sein als str_padund sprintf.
Übrigens: Mein Test hat auch gesagt, dass sprintfdas etwas schneller ist als str_pad. Ich habe alle Tests mit PHP 5.6 gemacht.
Bearbeiten: Obwohl die substrVersion immer noch sehr schnell zu sein scheint (PHP 7.2), ist sie auch fehlerhaft , falls Ihre Eingabe länger sein kann als die Länge, auf die Sie auffüllen möchten. Sie möchten beispielsweise 3 Stellen auffüllen und Ihre Eingabe hat 4 Stellen, substr('0000' . '1234', -3) = '234'die nur die letzten 3 Stellen ergeben
Danke, ich mag deine Variation, aber denke, es sollte $ str = (strlen ($ input) <8) sein? 0. $ input: $ input;
JMX
@JMX In der Tat funktionieren beide Möglichkeiten gut. (Neben meinem Vermissten habe $ich gerade behoben)
AbcAeffchen
1
Ich habe diese einfache Funktion geschrieben, um dieses Format zu erzeugen: 01:00:03
Sekunden werden immer angezeigt (auch wenn Null). Minuten werden angezeigt, wenn sie größer als Null sind oder wenn Stunden oder Tage erforderlich sind. Stunden werden angezeigt, wenn sie größer als Null sind oder wenn Tage erforderlich sind. Tage werden angezeigt, wenn sie größer als Null sind.
sprintf('%+03d:00 UTC',$i)
wo$i
-12 bis 12 ist, + oder - nach Bedarf druckt und auch führende Nullen für Zahlen mit weniger als 2 Ziffern setzt. Ideal zum Erstellen einer ZeitzoneSELECT
in HTML.sprintf
( 3v4l.org/junvv/perf#output ) ist ein bisschen schneller alsstr_pad
( 3v4l.org/cliNP/perf#output )Vorausgesetzt, der Wert ist in $ value:
Um es zu wiederholen:
printf("%08d", $value);
Es bekommen:
$formatted_value = sprintf("%08d", $value);
Das sollte den Trick machen
quelle
Wenn ich 01 anstelle von 1 benötige, hat Folgendes für mich funktioniert:
quelle
quelle
Obwohl ich nicht sicher bin, was Sie tun möchten, suchen Sie wahrscheinlich nach Sprintf .
Das wäre:
quelle
sprintf
ist was du brauchst.EDIT ( irgendwie von den Downvotes angefordert ), von der oben verlinkten Seite, hier ein Beispiel "Null-aufgefüllte Ganzzahlen":
quelle
Einfache Antwort
Ich bin mir nicht sicher, wie ich den Kommentar "Es wird nie mehr als 8 Stellen haben" interpretieren soll und ob er sich auf die Eingabe oder die Ausgabe bezieht. Wenn es sich auf die Ausgabe bezieht, müssten Sie einen zusätzlichen Aufruf von substr () haben, um die Zeichenfolge zu beschneiden.
Zum Abschneiden der ersten 8 Ziffern
Zum Abschneiden der letzten 8 Ziffern
quelle
Wenn die Eingabenummern immer 7 oder 8 Stellen haben, können Sie auch verwenden
Ich habe einige Tests durchgeführt und festgestellt, dass dies doppelt so schnell sein würde wie
str_pad
odersprintf
.Wenn die Eingabe eine beliebige Länge haben kann, können Sie sie auch verwenden
Dies ist nicht so schnell wie das andere, sollte aber auch etwas schneller sein als
str_pad
undsprintf
.Übrigens: Mein Test hat auch gesagt, dass
sprintf
das etwas schneller ist alsstr_pad
. Ich habe alle Tests mit PHP 5.6 gemacht.Bearbeiten: Obwohl die
substr
Version immer noch sehr schnell zu sein scheint (PHP 7.2), ist sie auch fehlerhaft , falls Ihre Eingabe länger sein kann als die Länge, auf die Sie auffüllen möchten. Sie möchten beispielsweise 3 Stellen auffüllen und Ihre Eingabe hat 4 Stellen,substr('0000' . '1234', -3) = '234'
die nur die letzten 3 Stellen ergebenquelle
$
ich gerade behoben)Ich habe diese einfache Funktion geschrieben, um dieses Format zu erzeugen: 01:00:03
Sekunden werden immer angezeigt (auch wenn Null). Minuten werden angezeigt, wenn sie größer als Null sind oder wenn Stunden oder Tage erforderlich sind. Stunden werden angezeigt, wenn sie größer als Null sind oder wenn Tage erforderlich sind. Tage werden angezeigt, wenn sie größer als Null sind.
Beispiele:
quelle
quelle
Das funktioniert perfekt:
quelle
Sie können das Jonglieren immer missbrauchen:
Dies funktioniert nicht wie erwartet, wenn entweder
10 ** pad > INT_MAX
odervalue >= 10 * pad
.quelle
quelle