Antworten:
Verwendung sprintf
:
sprintf('%08d', 1234567);
Alternativ können Sie auch verwenden str_pad
:
str_pad($value, 8, '0', STR_PAD_LEFT);
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 SELECT
in HTML.
sprintf
( 3v4l.org/junvv/perf#output ) ist ein bisschen schneller als str_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
Wenn ich 01 anstelle von 1 benötige, hat Folgendes für mich funktioniert:
$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);
sprintf
ist was du brauchst.
EDIT ( irgendwie von den Downvotes angefordert ), von der oben verlinkten Seite, hier ein Beispiel "Null-aufgefüllte Ganzzahlen":
<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
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.
Zum Abschneiden der ersten 8 Ziffern
$p = substr(sprintf('%08d', $p),0,8);
Zum Abschneiden der letzten 8 Ziffern
$p = substr(sprintf('%08d', $p),-8,8);
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_pad
oder 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_pad
und sprintf
.
Übrigens: Mein Test hat auch gesagt, dass sprintf
das etwas schneller ist als str_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 ergeben
$
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.
function formatSeconds($secs) {
$result = '';
$seconds = intval($secs) % 60;
$minutes = (intval($secs) / 60) % 60;
$hours = (intval($secs) / 3600) % 24;
$days = intval(intval($secs) / (3600*24));
if ($days > 0) {
$result = str_pad($days, 2, '0', STR_PAD_LEFT) . ':';
}
if(($hours > 0) || ($result!="")) {
$result .= str_pad($hours, 2, '0', STR_PAD_LEFT) . ':';
}
if (($minutes > 0) || ($result!="")) {
$result .= str_pad($minutes, 2, '0', STR_PAD_LEFT) . ':';
}
//seconds aways shown
$result .= str_pad($seconds, 2, '0', STR_PAD_LEFT);
return $result;
} //funct
Beispiele:
echo formatSeconds(15); //15
echo formatSeconds(100); //01:40
echo formatSeconds(10800); //03:00:00 (mins shown even if zero)
echo formatSeconds(10000000); //115:17:46:40
$no_of_digit = 10;
$number = 123;
$length = strlen((string)$number);
for($i = $length;$i<$no_of_digit;$i++)
{
$number = '0'.$number;
}
echo $number; /////// result 0000000123
Das funktioniert perfekt:
$number = 13246;
echo sprintf( '%08d', $number );
function duration($time){
$hours = '';
$minutes = '00:';
$seconds = '00';
if($time >= 3600){
//0 - ~ hours
$hours = floor($time / 3600);
$hours = str_pad($hours, 2, '0', STR_PAD_LEFT) . ':';
$time = $time % 3600;
}
if($time >= 60){
//0 - 60 minute
$minutes = floor($time / 60);
$minutes = str_pad($minutes, 2, '0', STR_PAD_LEFT) . ':';
$time = $time % 60;
}
if($time){
//0 - 60 second
$seconds = str_pad($time, 2, '0', STR_PAD_LEFT);
}
return $hours . $minutes . $seconds;
}
echo duration(59); // 00:59
echo duration(590); // 09:50
echo duration(5900); // 01:38:20