Página 1 de 1

PHP: str_pad

Enviado: 10 Mai 2016 23:51
por cjp
Pessoal,

Alguém poderia me dizer como faço para usar correntamente a função str_pad do PHP? Estou querendo alinhar uma lista, desta maneira:

Código: Selecionar todos

$mensagem = $mensagem.str_pad(substr($rw["produto"],0,30),60)."        ".$rw["prsacolao"]."                           ".$rw["prmaximo"].PHP_EOL;
Não sei se estou fazendo algo errado, mas não está saindo alinhado. Segui o modelo do manual do PHP, mas devo estar fazendo alguma coisa errada.

PHP: str_pad

Enviado: 11 Mai 2016 07:12
por ANDRIL

Código: Selecionar todos

$mensagem = $mensagem.str_pad(substr($rw["produto"],0,30),60," ",STR_PAD_RIGHT)."    ".$rw["prsacolao"]."             ".$rw["prmaximo"].PHP_EOL;
Mesmo dizendo que por padrão o caracter de preenchimento seja espaço, coloque-o no 3o parâmetro alem do 4o parâmetro responsável pelo alinhamento. Aqui uso assim e funciona perfeitamente. Uso PHP 5.4.45

PHP: str_pad

Enviado: 11 Mai 2016 17:45
por cjp
Caro Andril,

Em primeiro lugar, muito obrigado pela resposta e pelo seu interesse em ajudar.

Da forma como vc me sugeriu melhorou bastante, mas acho que ainda não está 100% certo. Ainda está ficando desalinhado.

Fiz vários testes, mas este é mais evidente:

Código: Selecionar todos

    $mensagem = $mensagem.str_pad(substr($rw["produto"],0,12),35,"-----",STR_PAD_RIGHT)."    ".$rw["prsacolao"]."                            ".$rw["prmaximo"].PHP_EOL;
	echo "<br>";
	echo substr($rw["produto"],0,12)."!!!";
	echo "<br>";
	echo str_pad(substr($rw["produto"],0,12),35,"-----",STR_PAD_RIGHT)."!!!";
Note que troquei o espaço por ---- para facilitar a visualização. Idem quanto ao !!! final.

Veja como aparece na tela:
pão de leite!!!
pão de leite-----------------------!!!
abacaxi (1 u!!!
abacaxi (1 u-----------------------!!!
ameixa fresc!!!
ameixa fresc-----------------------!!!
côco seco (1!!!
côco seco (1-----------------------!!!
limão (12 un!!!
limão (12 un-----------------------!!!
mamão formos!!!
mamão formos-----------------------!!!
manga Tomy (!!!
manga Tomy (-----------------------!!!
maracujá aze!!!
maracujá aze-----------------------!!!
melancia (1 !!!
melancia (1 -----------------------!!!
melão (1 uni!!!
melão (1 uni-----------------------!!!
abobrinha (2!!!
abobrinha (2-----------------------!!!
alho (+- 1 K!!!
alho (+- 1 K-----------------------!!!
batata doce !!!
batata doce -----------------------!!!
beterraba (1!!!
beterraba (1-----------------------!!!
cebola (2,5 !!!
cebola (2,5 -----------------------!!!
cenoura (4 u!!!
cenoura (4 u-----------------------!!!
chuchu (1 un!!!
chuchu (1 un-----------------------!!!
ovo vermelho!!!
ovo vermelho-----------------------!!!
Aparentemente, o número de caracteres está correto, mas em algumas linhas os caracteres ocupam mais espaço que os outros, o que causa o desalinho.

Parece então que o problema não é na str_pad(), nem na substr(), estou correto? Mas como resolver isso?

PHP: str_pad

Enviado: 11 Mai 2016 23:00
por ANDRIL
Se o problema não é com a função str_pad() pode ser o tipo de fonte durante a exibição. Já tentou usar a Courier, esta tem tamanho igual para qualquer caracter e não deve dar diferença.

PHP: str_pad

Enviado: 08 Jun 2016 19:59
por cjp
Realmente com a fonte Courier, na tela, fica correto.

O problema eh que estou querendo enviar esta lista por e-mail. Dai estou fazendo uma variavel com os dados para enviar usando a funcao mail(). Mas no e-mail nao estah alinhado, nao esta usando a fonte Courier.

Por favor, veja se estou fazendo algo errado:

Código: Selecionar todos

  echo "<FONT FACE='Courier New'>";
  
  $mensagem = $mensagem.PHP_EOL."Produtos com preço maior:".PHP_EOL."Produto                                            Preço                        Preço máximo".PHP_EOL;

  while ($rw=mysql_fetch_array($rs)) 
  {
    $mensagem = $mensagem.str_pad(substr($rw["produto"],0,12),35,"  ",STR_PAD_RIGHT)."    ".$rw["prsacolao"]."                            ".$rw["prmaximo"].PHP_EOL;
	
  }
 

 
mail ("ibcneto@inaciocarvalho.com.br",                       //email aonde o php vai enviar os dados do form
      "Lista dos produtos a enviar",
      "\n".$mensagem,
      "From: hort@inaciocarvalho.com.br"
     );