Só queria adicionar: str_pad não é uma opção com números negativos
wtf8_decode 12/01
6
Apenas para adicionar o que o wtf8_decode disse; Números negativos não teriam zeros à esquerda e não são números positivos. por exemplo, 08 seria escrito como uma data ou algo que espera um número positivo de dois dígitos (código de classificação da conta bancária, etc.). Por favor, corrija-me se eu estiver errado, mas, tanto quanto eu sei, não existe um exemplo da vida real de exigir um zero inicial com um valor negativo?
guyver4mk
3
Queria acrescentar que 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 SELECTem HTML.
Seria melhor com um exemplo ou mais explicação além de simplesmente vincular a página de manual para sprintf ().
precisa saber é o seguinte
13
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.
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_padou 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_padesprintf .
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 substrversã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
Obrigado, eu gosto da sua variação, mas acho que deve ser $ str = (strlen ($ input) <8)? 0 $ input: $ input;
JMX #
@JMX De fato, ambas as formas funcionam bem. (Ao lado de minha falta $Eu apenas fixo)
AbcAeffchen
1
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.
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árioSELECT
em HTML.sprintf
( 3v4l.org/junvv/perf#output ) é um pouco mais rápido do questr_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
fonte
Quando preciso de 01 em vez de 1, o seguinte funcionou para mim:
fonte
fonte
Embora eu não tenha muita certeza do que você quer fazer, provavelmente está procurando o sprintf .
Este seria:
fonte
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":
fonte
Resposta simples
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
Para recortar os últimos 8 dígitos
fonte
Se os números de entrada sempre tiverem 7 ou 8 dígitos, você também poderá usar
Fiz alguns testes e concluí que isso seria o dobro do mais rápido que
str_pad
ousprintf
.Se a entrada puder ter algum comprimento, você também poderá usar
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 quesubstr('0000' . '1234', -3) = '234'
resultarão apenas nos últimos 3 dígitosfonte
$
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.
Exemplos:
fonte
fonte
Isso funciona perfeitamente:
fonte
Você sempre pode abusar do malabarismo de tipos:
Isso não funcionará conforme o esperado, se é
10 ** pad > INT_MAX
ou nãovalue >= 10 * pad
.fonte
fonte