Risposte:
Utilizzare sprintf
:
sprintf('%08d', 1234567);
In alternativa puoi anche usare str_pad
:
str_pad($value, 8, '0', STR_PAD_LEFT);
sprintf('%+03d:00 UTC',$i)
dove $i
è compreso tra -12 e 12, stamperà + o - secondo necessità e inserirà anche zeri iniziali per numeri inferiori a 2 cifre. Ottimo per creare un fuso orario SELECT
in HTML.
sprintf
( 3v4l.org/junvv/perf#output ) è un po 'più veloce di str_pad
( 3v4l.org/cliNP/perf#output )
Dato che il valore è in $ value:
Per fare eco:
printf("%08d", $value);
Capirlo:
$formatted_value = sprintf("%08d", $value);
Questo dovrebbe fare il trucco
Quando ho bisogno di 01 anziché 1, per me ha funzionato:
$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);
sprintf
è quello che ti serve.
EDIT (in qualche modo richiesto dai downvotes ), dalla pagina collegata sopra, ecco un esempio di "numeri interi con zero":
<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
Semplice risposta
$p = 1234567;
$p = sprintf("%08d",$p);
Non sono sicuro di come interpretare il commento dicendo "Non sarà mai più di 8 cifre" e se si riferisce all'input o all'output. Se si riferisce all'output, è necessario disporre di una chiamata substr () aggiuntiva per tagliare la stringa.
Per tagliare le prime 8 cifre
$p = substr(sprintf('%08d', $p),0,8);
Per tagliare le ultime 8 cifre
$p = substr(sprintf('%08d', $p),-8,8);
Se i numeri di input hanno sempre 7 o 8 cifre, puoi anche usare
$str = ($input < 10000000) ? 0 . $input : $input;
Ho eseguito alcuni test e ho capito che questo sarebbe raddoppiato più velocemente di str_pad
o sprintf
.
Se l'input può avere qualsiasi lunghezza, è possibile utilizzare anche
$str = substr('00000000' . $input, -8);
Questo non è veloce come l'altro, ma dovrebbe anche essere un po 'più veloce di str_pad
e sprintf
.
Btw: Il mio test ha anche detto che sprintf
è un po 'più veloce di str_pad
. Ho effettuato tutti i test con PHP 5.6.
Modifica: anche se la substr
versione sembra essere ancora molto veloce (PHP 7.2), si interrompe anche nel caso in cui l'input possa essere più lungo della lunghezza che si desidera pad. Ad esempio, vuoi passare a 3 cifre e il tuo input ha 4 cifre che substr('0000' . '1234', -3) = '234'
comporteranno solo le ultime 3 cifre
$
ho appena risolto)
Ho scritto questa semplice funzione per produrre questo formato: 01:00:03
I secondi vengono sempre visualizzati (anche se zero). I minuti vengono visualizzati se maggiore di zero o se sono necessarie ore o giorni. Le ore vengono visualizzate se maggiore di zero o se sono richiesti giorni. I giorni vengono visualizzati se maggiore di zero.
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
Esempi:
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
Funziona perfettamente:
$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