Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Brxlx

Separar array por linhas

Recommended Posts

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quebra de linha você faz com o PHP_EOL.

Ex.:

echo '<li>' . $rs['id'] . '</li>' . PHP_EOL;

Para cortar o texto, sempre uso esta função:

function resumo_texto($texto, $total_catacteres) {
    $texto = strip_tags($texto);
    $contar = strlen($texto);
    if ($contar <= $total_catacteres) {
        return $texto;
    } else {
        $total_corte = strrpos(substr($texto, 0, $total_catacteres), ' ');
        return substr($texto, 0, $total_corte) . '...';
    }
}

// Uso
$texto = "Este é o texto a ser cortado";
$novo = resumo_texto($texto, 10);

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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
)

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.