Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala aí, galera, tudo beleza?
É o seguinte, faz tempo que estou tentando resolver esse problema e não consigo: tenho um array cheio de informações que leio de um webservice e salvo em uma variável. Preciso dividir por linhas cada '<li>' que recebo, para, assim, exibir cada coisa no seu lugar.
O código que consegui foi este:
<?php
function limitarTexto($texto, $limite)
{
if ((strlen($texto) + 3) >= $limite) // '+ 3' é uma margem de segurança
$texto = substr($texto, 0, strrpos(substr($texto, 0, $limite), ' ')) . '...';
return $texto;
}
$arquivo = fopen("about.html","w+");
$valor = strpos($result[1],'<ul>');
$corta = mb_substr($result[1],$valor);
$tam = strlen($corta);
$limitador = 90;
$novo = limitarTexto($corta ,$limitador);
fwrite($arquivo,"<html>\n<body>".$corta."\n</body>\n</html>");
fclose($arquivo);
print_r($novo);
?>
E o conteúdo da página html fica assim:
<html>
<body><ul><li>Altitude: Altitude x</li><li>Lot Code: Código do Lote</li><li>Crop: Safra</li><li>Harvesting Date: Data da colheita</li><li>Variety: Variedades</li><li>Harvesting System: Tipo de colheita</li><li>Dry Process: Processo de secagem</li><li>Award: Certificações</li><li>About: Sobre a fazenda. Pode ser um texto médio sem quebra de linha (Enter)</li><li>About ST: Sobre a rastreabilidade. Pode ser um texto médio sem quebra de linha (Enter)</li><li>Link: www.stcafe.com.br</li></ul>
</body>
</html>
Aí que vem o problema: Quero cortar essa string depois do ':' de cada elemento da lista, por exemplo Altitude: Altitude x e exibir somente Altitude x, assim como nos outros, sendo que o que vem escrito após os ':' é variável, ou seja, não posso limitar pelo final, só pelo começo.
Alguém sabe como posso fazer isso, se é possível criar um tamanho máximo que pode conter os dados? E como quebrar as linhas?
Desde já, Obrigado!
Quebrando os <li> dá pra resolver:
<?php
$texto = 'HTML GERADO';
$partes = explode('<li>', $texto);
unset($partes[0]); // elimina o cabecalho
foreach($partes as $parte):
$valores = explode(':', $parte);
$campo = $valores[0];
$valor = explode('</li>', $valores[1]); // só pega até o </li>
$valor = $valor[0];
echo 'O valor de '.$campo.' é <strong>'.$valor.'</strong><br />';
endforeach;
?>
Caso não tenha nenhum ":" no conteúdo variável, este trecho acima resolve.
Obrigado pelas sugestões, Alex e Diego. Logo mais estarei tentando implementar, acho que dá pra juntar solução dos dois e resolver. :D Em breve posto a solução!
Obrigado, meus caros, finalmente funcionou perfeitamente, tava muito preocupado com isso!
Agradeço pela atenção, Abraços! :joia:
>
Quebrando os <li> dá pra resolver:
<?php$texto = 'HTML GERADO';$partes = explode('<li>', $texto);unset($partes[0]); // elimina o cabecalhoforeach($partes as $parte): $valores = explode(':', $parte); $campo = $valores[0]; $valor = explode('</li>', $valores[1]); // só pega até o </li> $valor = $valor[0]; echo 'O valor de '.$campo.' é <strong>'.$valor.'</strong><br />';endforeach;?>
Caso não tenha nenhum ":" no conteúdo variável, este trecho acima resolve.
Uma última dúvida, Diego: Se eu quiser exibir apenas um resultado de $valor, como faço, sem ter que ficar cortando a string?
Não entendi bem a sua questão...
Se for para exibir somente a primeira vez que passar no loop, você pode fazer um contador e parar a execução quando necessário (verificando o valor do contador) ou, utilizar FOR no lugar de FOREACH.
É isso? Se não for, você pode explicar um pouco mais o que você precisa?
>
Não entendi bem a sua questão...
Se for para exibir somente a primeira vez que passar no loop, você pode fazer um contador e parar a execução quando necessário (verificando o valor do contador) ou, utilizar FOR no lugar de FOREACH.
É isso? Se não for, você pode explicar um pouco mais o que você precisa?
Acho que isso, por exemplo, quero exibir só Sobre a fazenda. Pode ser um texto médio sem quebra de linha (Enter), em determinado lugar, Data da colheita e outro, e assim por diante. Não consigo ter esse controle. Ficou mais claro? Obrigado!
Mude o foreach para:
foreach($partes as $parte):
$valores = explode(':', $parte);
$campo = $valores[0];
$valor = explode('</li>', $valores[1]); // só pega até o </li>
$dado[] = $valor[0];
endforeach;
echo $dado[0]; // Latitude
echo $dado[1]; // Lot Code
echo $dado[2]; // ...
Agora é só exibir a variável $dado[posicao_desejada] onde precisar.
Para saber a ordenação que cada campo ficou na variável $dado, dê um print_r($dado) no fim do código.
Exemplo de retorno:
Array
(
[0] => Altitude x
[1] => Código do Lote
[2] => Safra
[3] => Data da colheita
[4] => Variedades
[5] => Tipo de colheita
[6] => Processo de secagem
[7] => Certificações
[8] => Sobre a fazenda. Pode ser um texto médio sem quebra de linha (Enter)
[9] => Sobre a rastreabilidade. Pode ser um texto médio sem quebra de linha (Enter)
[10] => www.stcafe.com.br
)>
Mude o foreach para:
foreach($partes as $parte):
$valores = explode(':', $parte);
$campo = $valores[0];
$valor = explode('</li>', $valores[1]); // só pega até o </li>
$dado[] = $valor[0];
endforeach;
echo $dado[0]; // Latitude
echo $dado[1]; // Lot Code
echo $dado[2]; // ...
Agora é só exibir a variável $dado[posicao_desejada] onde precisar.
Para saber a ordenação que cada campo ficou na variável $dado, dê um print_r($dado) no fim do código.
Exemplo de retorno:
Array
(
[0] => Altitude x
[1] => Código do Lote
[2] => Safra
[3] => Data da colheita
[4] => Variedades
[5] => Tipo de colheita
[6] => Processo de secagem
[7] => Certificações
[8] => Sobre a fazenda. Pode ser um texto médio sem quebra de linha (Enter)
[9] => Sobre a rastreabilidade. Pode ser um texto médio sem quebra de linha (Enter)
[10] => www.stcafe.com.br
)
Agora tá bala! Muito obrigado pela atenção, Diego! Abraços. :D
Quebra de linha você faz com o PHP_EOL.
Ex.:
Para cortar o texto, sempre uso esta função:
// Uso