Brxlx 0 Denunciar post Postado Abril 22, 2014 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
allex_carvalho 124 Denunciar post Postado Abril 22, 2014 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
Diego Arent 19 Denunciar post Postado Abril 22, 2014 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
Brxlx 0 Denunciar post Postado Abril 22, 2014 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
Brxlx 0 Denunciar post Postado Abril 23, 2014 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
Diego Arent 19 Denunciar post Postado Abril 23, 2014 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
Brxlx 0 Denunciar post Postado Abril 23, 2014 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
Diego Arent 19 Denunciar post Postado Abril 23, 2014 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
Brxlx 0 Denunciar post Postado Abril 23, 2014 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