Respostas:
Use sprintf
:
sprintf('%08d', 1234567);
Como alternativa, você também pode usar str_pad
:
str_pad($value, 8, '0', STR_PAD_LEFT);
sprintf('%+03d:00 UTC',$i)
onde $i
é -12 a 12, será impressa + ou - conforme a necessidade, e também irá colocar zeros à esquerda para números menos de 2 dígitos. Ótimo para criar um fuso horário SELECT
em HTML.
sprintf
( 3v4l.org/junvv/perf#output ) é um pouco mais rápido do que str_pad
( 3v4l.org/cliNP/perf#output )
Dado que o valor está em $ value:
Para fazer eco:
printf("%08d", $value);
Para obtê-la:
$formatted_value = sprintf("%08d", $value);
Isso deve fazer o truque
Quando preciso de 01 em vez de 1, o seguinte funcionou para mim:
$number = 1;
$number = str_pad($number, 2, '0', STR_PAD_LEFT);
sprintf
é o que você precisa.
EDIT (de alguma forma solicitado pelos votos negativos ), na página vinculada acima, aqui está um exemplo de "números inteiros preenchidos com zero":
<?php
$isodate = sprintf("%04d-%02d-%02d", $year, $month, $day);
?>
Resposta simples
$p = 1234567;
$p = sprintf("%08d",$p);
Não sei como interpretar o comentário dizendo "Ele nunca terá mais de 8 dígitos" e se está se referindo à entrada ou à saída. Se se referir à saída, você precisaria ter uma chamada substr () adicional para cortar a string.
Para recortar os 8 primeiros dígitos
$p = substr(sprintf('%08d', $p),0,8);
Para recortar os últimos 8 dígitos
$p = substr(sprintf('%08d', $p),-8,8);
Se os números de entrada sempre tiverem 7 ou 8 dígitos, você também poderá usar
$str = ($input < 10000000) ? 0 . $input : $input;
Fiz alguns testes e concluí que isso seria o dobro do mais rápido que str_pad
ou sprintf
.
Se a entrada puder ter algum comprimento, você também poderá usar
$str = substr('00000000' . $input, -8);
Isso não é tão rápido quanto o outro, mas também deve ser um pouco mais rápido que str_pad
esprintf
.
Btw: Meu teste também disse que sprintf
é um pouco mais rápido questr_pad
. Fiz todos os testes com o PHP 5.6.
Edit: Embora a substr
versão pareça ainda ser muito rápida (PHP 7.2), ela também está corrompida caso sua entrada possa ser maior que o comprimento que você deseja usar. Por exemplo, você deseja preencher com 3 dígitos e sua entrada possui 4 que substr('0000' . '1234', -3) = '234'
resultarão apenas nos últimos 3 dígitos
$
Eu apenas fixo)
Eu escrevi esta função simples para produzir este formato: 01:00:03
Segundos são sempre mostrados (mesmo que zero). Os minutos são mostrados se for maior que zero ou se forem necessárias horas ou dias. As horas são mostradas se maior que zero ou se forem necessários dias. Os dias são mostrados se maiores que 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
Exemplos:
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
Isso funciona perfeitamente:
$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