Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal estou com um problema..
Estou precisando formatar um relatorio, e quero que o texto tenha um posicionamento alinhado, só que não estou consigo alinhar com o str_pad...
Abaixo o que eu estou fazendo
$codclsj = str_pad($codclsj, 8);
$nome = str_pad($nome, 50);
$plano = $row->plano;
depois armazeno em uma variavel
$imprimir = $codclsj.$nome.$plano;
e depois imprimo.
echo $imprimir.'<br>';
só que não esta funcionando a formatação..
o que eu estou fazendo de errado?
valeu pessoal
Não sei como usar o sprintf para fazer isso.. como seria? eu estou fazendo assim
$codclsj = array($codclsj);
$nome = array($nome);
$plano = array($plano);
//Primira Volta do Laço
if($cont == ''){
?>
<p><b class="titulo">CABECALHO</b></p>
<p align='right'><? echo $data?></p>
<?
$cont = $cliente;
}
if($cliente == $cont){
}else{
echo "<div class='pagina'>";
echo "</div>";
?>
<p><b>CABECALHO</b></p>
<p align='right'><? echo $data?></p>
<p align='left'>
<?
$cont = $cliente;
}
for( $i=0; $i<count($nome); $i++ )
echo str_pad($codclsj[$i], 8 );
echo str_pad($nome[$i], 50,'-',STR_PAD_RIGHT );
echo str_pad($plano[$i], 20 );
echo "<br>";
}Mostre o formato que você espera para $imprimir, som valores supostos, se possível.
eu preciso imprimir assim, onde os traços é o espaço vazio
>
01234567 FULADO DE TAL------------------PLANO1
05550455 JOSE DA SILVA COSTA----------PLANO2
só que nao esta saindo dessa forma,
É que você trocou as bolas no str_pad()
Isso aqui:
echo str_pad($codclsj[$i], 8 );
Vai adicionar tantos ESPAÇOS quantos forem necessários À DIREITA até que a string alcance os 8 caracteres.
Por quê à ESPAÇOS e À DIREITA? Porque você omitiu o terceiro e quarto parâmetros da função e, sendo assim os padrões serão utilizados, respectivamente, espaços e alinhamento à direita (STR_PAD_RIGHT).
str_pad($nome[$i], 50,'-',STR_PAD_RIGHT );
Aqui você acertou, mas o último argumento poderia ter sido omitido, já que é o mesmo que o padrão.
str_pad($plano[$i], 20 );
Para esse caso, vale a mesma explicação que o primeiro. Porém esse código NÃO VAI, pelo menos não visivelmente, adicionar espaços à direita da string. Isso porque visualmente múltiplos espaços são repetições da entidade
Para que funcionasse, você deveria fazer uma gambiarrazinha:
str_replace( ' ', ' ', str_pad( 'Bruno Augusto', 20 ) );
Dito isso, não justificaria forçá-lo a tentar fazer sozinho, afinal tá tudo tão na cara...
Você pode continuar com str_pad():
$codclsj = 12345;
$codclsj = str_pad( $codclsj, 8, 0, STR_PAD_LEFT );
$nome = 'Bruno Augusto';
$nome = str_pad( $nome, 50, '-' );
$plano = 'PLANO3';
echo $codclsj, ' ', $nome, $plano, '<br /><br />';
// Saída: 00012345 Bruno Augusto-------------------------------------PLANO3
Ou, como eu disse, fazer com sprintf(), numa única linha:
$codclsj = 12345;
$nome = 'Bruno Augusto';
$plano = 'PLANO3';
printf( "%08d %-'-50s%s", $codclsj, $nome, $plano );
Perceba apenas que eu usei printf() que é idêntica à sprintf(), exceto que esta imprime na tela e sprintf(), retorna para usar numa variável.
Assim você dispensa o echo.
Que fique registrado nos autos do processo que com s/printf() foi um pouquinho complicado de empurrar os tracinhos, mas deu certo.
Experimenta fazer com sprintf()