PHP: Usando o str_pad() para completar strings que necessitam de um tamanho mínimo.

A função str_pad() do PHP é uma daquelas que ficam escondidas ali e muito pouca gente sabe para que serve. Estas funções "escondidas" podem mostrar-se muito úteis na hora de resolver problemas aparentemente complexos ou chatos.

O str_pad() completa strings de forma que elas fiquem sempre com um tamanho mínimo.

Vamos ver alguns exemplos abaixo:

 <?php  
      $input = "Exemplo";  
      echo str_pad($input, 10);  
      echo "<br>";  
      echo str_pad($input, 10, "-=", STR_PAD_LEFT);  
      echo "<br>";  
      echo str_pad($input, 10, "-=", STR_PAD_RIGHT);  
      echo "<br>";  
      echo str_pad($input, 10, "_", STR_PAD_BOTH);  
      echo "<br>";  
      echo str_pad($input, 2 , "___");  

O código acima retorna as seguintes saídas:

Exemplo
-=-Exemplo
Exemplo-=-
_Exemplo__
Exemplo

$input é sua string original. O parâmetro seguinte é o número de caracteres mínimo que sua string terá. O terceiro parâmetro é a string que será usada para completar a quantidade mínima de caracteres. O parâmetro final diz respeito a posição em que será inserida esta string complementar. Esquerda (STR_PAD_LEFT), direita (STR_PAD_RIGHT) ou de ambos os lados(STR_PAD_BOTH). Este parâmetro é opcional como pode ser visto nos exemplos.

Se a quantidade mínima de caracteres for menor que o tamanho de sua string $input original a função simplesmente retorna $input sem alterações.

Um uso interessante para esta função é a formatação de tempo em micro segundos, muito utilizando como parâmetro de verificação de modificação em jsons.


 <?php  
       echo "Segundos (UNIX TIME):".time();  
       echo "<br>";  
       echo "Micro segundos (UNIX TIME): ".microtime(true);  

O código acima retorna as seguintes saídas:

Segundos (UNIX TIME):1400611378
Micro segundos (UNIX TIME): 1400611378.6432

Veja que os micro segundos, dependendo da configuração de seu servidor, vem com um determinado número de casas decimais, além de um ponto que separa os segundos dos micro segundos.

Para formatar esta hora no padrão correto para json temos de retirar o ponto e fixar as casas decimais em 13. É importante fixar o tamanho porque finais em 'zero' são retirados, o que pode comprometer a integridade do sistema que lê o json.

Perceba que este retorno, por exemplo

1400611395.7000

Acaba virando

1400611395.70

 <?php  
 //      Ajustando microtime para 13 casas fixas.  
       echo str_pad(str_replace(".","",microtime(true)),13,"0");  

Saída:

1400611395700

Neste caso a saída sempre terá 13 casas. Se o microtime() original retornar apenas 12 ou 11 casas str_pad() completará as faltantes com 0 (zeros).

str_replace() faz a função de retirada do ponto para "limpar" a string.

Por hoje é isso!

Comentários

Postagens mais visitadas deste blog

MySQL - Completando quantidades fixas de caracteres com as funções LPAD() e RPAD()

MySQL - Clonando tabelas na linha de comando

PHP - Gerando arquivo em UTF-8 com fwrite() e utf8_encode()