Ir para conteúdo

POWERED BY:

Arquivado

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

Helinho Coelho

[Resolvido] Retornar várias palavras específicas de dentro de uma

Recommended Posts

Olá pessoal,

 

Não estou conseguindo retornar todas as palavras correspondentes de uma String. Alguém pode me ajudar a finalizar este código?

 

 

function procpalavras ($frase, $palavras, $resultado = 0) {

	foreach ( $palavras as $key => $value ) {
	$pos = strpos($frase, $value);
	if ($pos !== false) { $resultado = 1; break; }
	} 
	return $value;

}

$frase = "meu amigo carlos amaral de 2ª a 6ª";
$palavras = array ("amigo","amaral","2ª","6ª");
echo procpalavras($frase, $palavras) . " | ";

 

 

Infelizmente, por não conseguir montar o loop, eu só consigo obter o seguinte retorno:

"amigo"

 

Mas eu gostaria que me retornasse todas as palavras correspondentes na frase:

"amigo | amaral | 2ª | 6ª "

 

 

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu objetivo é exibir as palavras que foram encontradas na frase é isso ?

 


function procpalavras ($frase, $palavras, $resultado = 0) 
{
    $arrFrase = explode(" ",$frase);
    $arrAux = "";

    foreach($arrFrase as $word)
    {
    	if(in_array($word,$palavras))
    	{
    		$arrAux .= " | ".$word;
    	}	
    }

    return $arrAux;

}

$frase = "meu amigo carlos amaral de 2ª a 6ª";
$palavras = array ("amigo","amaral","2ª","6ª");
echo procpalavras($frase, $palavras);


Compartilhar este post


Link para o post
Compartilhar em outros sites

$campo34 = $_POST['campo34']; 

function procpalavras ($frase, $palavras, $resultado = 0) 
       {
           $arrFrase = explode(" ",$frase);
           $arrAux = "";
           foreach($arrFrase as $word)
           {
               if(in_array($word,$palavras))
               {
                       $arrAux .= " | ".$word;
               }       
           }
           return $arrAux;
       }

$frase = "$campo34";
$palavras = array ("domingo","2ª","3ª","4ª","5ª","6ª");
echo procpalavras($frase, $palavras);

 

a string "$campo34" vem de um formulário anterior que me retorna os valores de "checkboxes" anteriormente gravadas no banco de dados e que aparecem no FORM como:

value="a:6:{i:0;s:7:"domingo";i:1;s:3:"2ª";i:2;s:3:"3ª";i:3;s:3:"4ª";i:4;s:3:"5ª";i:5;s:3:"6ª";}"

 

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não deu certo também não!!!

 

=/

 

 

O Form da página anterior é:

<form action='gerar-pdf.php' method='post'>
<input name='campo34' type='hidden' value='a:6:{i:0;s:7:"domingo";i:1;s:3:"2ª";i:2;s:3:"3ª";i:3;s:3:"4ª";i:4;s:3:"5ª";i:5;s:3:"6ª";}' />
</form>

 

O código que está na página gerar-pdf.php é:

header("Content-Type: text/html;  charset=utf-8",true);

$campo34 = $_POST['campo34']; 

function procpalavras ($frase, $palavras, $resultado = 0) 
       {
		$arrFrase = explode(", ",$frase);
           $arrAux = "";
           foreach($arrFrase as $word)
           {
               if(in_array($word,$palavras))
               {
                       $arrAux .= " | ".$word;
               }       
           }
           return $arrAux;
       }

$frase = $campo34;
$palavras = array ("domingo","2ª","3ª","4ª","5ª","6ª");
echo procpalavras($frase, $palavras);

 

Obs: eu verifiquei a página anterior e o value do campo34 está retornando cheio com o valor:

a:6:{i:0;s:7:"domingo";i:1;s:3:"2ª";i:2;s:3:"3ª";i:3;s:3:"4ª";i:4;s:3:"5ª";i:5;s:3:"6ª";}

 

Quando eu substituo a string "$frase = $campo34" por um valor digitado como "domingo, 2ª, 5ª" a função retorna OK.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, use expressão regular para isso, é muito mais fácil.

 

Outro fator é utilizar unserialize neste $_POST[ 'campo34' ].

 

Veja:

<?php

header( 'Content-Type: text/html;  charset=UTF-8' );

function search_words( $phrase, array $words )
{
   $pattern = sprintf( '/(?P<result>%s)/i', implode( '|', $words ) );
   $subject = ( string ) $phrase;

   preg_match_all( $pattern, $subject, $matches );

   return $matches[ 'result' ];
}


$phrase = 'meu amigo carlos amaral vai a escola de 2ª a 6ª e no domingo descansa';
$words  = unserialize( 'a:6:{i:0;s:7:"domingo";i:1;s:3:"2ª";i:2;s:3:"3ª";i:3;s:3:"4ª";i:4;s:3:"5ª";i:5;s:3:"6ª";}' );

var_dump( search_words( $phrase, $words ) );

?>

 

Saída:

array
 0 => string '2ª' (length=3)
 1 => string '6ª' (length=3)
 2 => string 'domingo' (length=7)

 

Você terá um array com as palavras, agora se você quiser unir da forma "valor 1|valor2" é só meter um implode.

 

echo implode( '|', search_words( $phrase, $words ) );

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Carlos,

 

Obrigado pelos esclarecimentos. Mas eu fiz de acordo com as suas instruções e me retornou o seguinte erro:

 

Catchable fatal error: Argument 2 passed to search_words() must be an array, boolean given, called in /home/www/gerar-pdf.php on line 20 and defined in /home/www/gerar-pdf.php on line 5

 

A string $phrase precisaria necessariamente puxar o resultado do campo34 do formulário da página anterior e que está na atual (gerar-pdf.php) como a string $campo34.

 

Ou seja, onde você colocou "$words = unserialize ('a:6:{...)" deveria ser o $campo34? ou as palavras que quero achar no $campo34? Pois as palavras a serem buscadas sempre serão: "domingo","2ª","3ª","4ª","5ª","6ª".

 

O que deveria ser "unserializado" seria o $campo34, não?

 

 

Abs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu expliquei, é para pegar $_POST[ 'campo34' ]

 

$words  = unserialize( $_POST[ 'campo34' ] ); // que é 'a:6:{...'

 

Ou apenas

$words  = array( 'domingo', 'hoje' ); // array com as palavras que você quer encontrar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok Carlos,

 

na verdade a única coisa de que preciso é transformar esta string:

a:6:{i:0;s:7:"domingo";i:1;s:3:"2ª";i:2;s:3:"3ª";i:3;s:3:"4ª";i:4;s:3:"5ª";i:5;s:3:"6ª";}

 

 

nisso daqui:

domingo 2ª 3ª 4ª 5ª 6ª

 

 

É possível fazer isso? Você poderia me mostrar qual código eu utilizo para fazer isto? Se eu conseguir transformar aquela string gigante em apenas no modo resumido já me ajudaria.

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php

$string = 'a:6:{i:0;s:7:"domingo";i:1;s:3:"2ª";i:2;s:3:"3ª";i:3;s:3:"4ª";i:4;s:3:"5ª";i:5;s:3:"6ª";}';

echo implode( ' ', unserialize( $string ) );

// domingo 2ª 3ª 4ª 5ª 6ª

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos,

 

Utilizando o seguinte código:

$string = 'a:6:{i:0;s:7:"domingo";i:1;s:3:"2ª";i:2;s:3:"3ª";i:3;s:3:"4ª";i:4;s:3:"5ª";i:5;s:3:"6ª";}';

echo "Resultado: " . implode(', ', unserialize($string));

 

Me retorna o seguinte erro:

Warning:  implode() [function.implode]:  Invalid arguments passed in /www/gerar-pdf.php on line 4
Resultado:

 

Fiz alguma coisa errada?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas esse é o problema pois os valores serão sempre diferente pois:

 

de um usuário vem: a:6:{i:0;s:7:"domingo";i:1;s:3:"2ª";i:2;s:3:"3ª";i:3;s:3:"4ª";i:4;s:3:"5ª";i:5;s:3:"6ª";}

 

de outro usuário vem: a:1:{i:0;s:7:"domingo";}

 

de outro usuário vem: a:3:{i:0;s:3:"4ª";i:1;s:3:"5ª";i:2;s:3:"6ª";}

 

 

Sempre vem um valor diferente, mas eu preciso saber como retirar esse monte de "," ";" "s" ... e deixar somente a resposta ou registro do valor que vem do banco de dados, entendeu?

 

 

Interessante: o código que você falou funcionou no site de testes de códigos, mas parece que no meu servidor KingHost ele não funciona!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Referente a sua dúvida...

 

Não tem que complicar, veja:

function search_words( $phrase, array $words )
{
   $pattern = sprintf( '/(?P<result>%s)/i', implode( '|', $words ) );
   $subject = ( string ) $phrase;

   preg_match_all( $pattern, $subject, $matches );

   return $matches[ 'result' ];
}


$phrase = 'meu amigo carlos amaral vai a escola de 2ª a 6ª e no domingo descansa';
$words  = 'a:6:{i:0;s:7:"domingo";i:1;s:3:"2ª";i:2;s:3:"3ª";i:3;s:3:"4ª";i:4;s:3:"5ª";i:5;s:3:"6ª";}';
$words  = unserialize( utf8_decode( $words ) );

echo 
'Phrase: ', $phrase, '<br/>',
'Result: ', implode( ' | ', search_words( $phrase, $words ) );

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.