PHP: Função para procurar várias palavras em uma string

Bom, deu pra entender? ou entendeu sem dar? ;)

O meu problema era o seguinte, tenho um sistema de cadastro público mas alguns engraçadinhos gostavam de postar coisas bobas do tipo odeio fulano, ciclano é chato, etc. Então tinha que filtrar essa string, so que a função do PHP strpos só nos dá a opção de encontrar apenas uma palavra. Solução? Criei uma array, depurei chegando cada uma e pronto, se encontrar umas das palavras da array ele me retorna 1, não encontrou retorna 0.

Bom, a função esta abaixo para quem quiser:


// Função para procura várias palavras em uma string
function procpalavras ($frase, $palavras, $resultado = 0) {
foreach ( $palavras as $key => $value ) {
$pos = strpos($frase, $value);
if ($pos !== false) { $resultado = 1; break; }
}
return $resultado;
}

// Exemplo 1 - Nenhuma palavra encontrada, retorna zero
$frase = "eu tenho uma galinha que se chamava merilu";
$palavras = array ("coelho","cavalo","formiga","cachorro","gato");
echo "Resultado: " . procpalavras($frase, $palavras) . "
";

// Exemplo 2 - Uma ou mais palavra encontrada, retorna um
$frase = "eu tenho um coelho que se chamava zé";
$palavras = array ("coelho","cavalo","formiga","cachorro","gato");
echo "Resultado: " . procpalavras($frase, $palavras) . "
";

Gostou? Comenta… Não gostou? Comenta também…

20 comments

  1. Parece-me interecante, ainda nao tive tempo de experimenta-la
    mas tbm estive tentando fazer algo do genro pro meu Web-site(ainda em dznvlvimento).
    Assim k tiver resultados mostrovos.

  2. Kra, ótima matéria, eu usei este script para descobrir o browser do usuario e a partir dai fazer determinada coisa, fiz algumas poucas adaptações para poder fazer o que eu queria, apesar de ter isto com javascript prefiro fazer com php no meu caso se enquadrou melhor, para quem quizer aki vai como ficou o script.

    // Função para procura várias palavras em uma string
    function procpalavras ($frase, $palavras, $resultado = 0) {
    foreach ( $palavras as $key => $value ) {
    $pos = strpos($frase, $value);
    if ($pos !== false) { $resultado = 1; break; }
    }
    return $value;
    }

    $palavras = array (“Chrome”,”Firefox”,”MSIE”);
    $nav = getenv(“HTTP_USER_AGENT”);
    echo “Resultado: ” . procpalavras($nav, $palavras) . “”;

    Vlw um abraço..

  3. Boa noite…
    Preciso de uma ajuda…

    Existe uma maneira de buscar vários registros de uma vez, digitando os códigos em uma textarea?

    Ou seja, tenho vários usuários e quero listar os usuários 1, 2, 4, 7… etc

    Na textarea teria que ser um em baixo do outro pois estes números serão copiados do Excel
    1
    2
    4
    7

    Peço uma ajuda e agradeço desde já.

  4. Carlos, essa questão é relativamente simples. Use 3 comandos. O primeiro é na hora de receber os valores da textarea, use a função nl2br para colocar o como quebra de linha. Depois use a funcao explode, delimitado pelo para colocar as linhas em uma array. Depois é so usar o foreach para utilizar cada linha recuperada.

  5. Meu problema é parecido, mas eu tenho a seguinte situação: O usuário digita uma equação matemática ex:(sin(60 + x1*x2). A função vai calcular como código do php, mas para isso eu preciso converter x1 e x2 em variáveis válidas do php. Como o usuário pode usar qualquer nome para uma variável, eu preciso verificar na equação digitada por ele todas as palavras que não são funções ou palavras reservadas e acrescentar o $ na frente. Para isso eu armazeno essas palavras em um array, mas aí como identificar as variáveis na string?

  6. Para aqueles que querem que o retorno da função seja a palavras encontradas, segue uma pequena alteração:

    function procpalavras ($frase, $palavras, $resultado = 0) {
    foreach ( $palavras as $key => $value ) {
    $pos = strpos($frase, $value);
    if ($pos !== false) {
    $palavras_encontradas[] = $value; }
    }
    $palavras_encontradas = implode(“, “,$palavras_encontradas);
    return $palavras_encontradas;
    }

    $frase = “eu tenho um coelho que se chamava zé”;
    $palavras = array (“coelho”,”eu”,”formiga”,”cachorro”,”gato”);
    echo procpalavras($frase, $palavras);

    Resultado:
    coelho, eu

  7. Deixei a funcao do post mais bonita e rapida, segue abaixo:

    function ArrayinStr($palavras, $frase) {
    foreach ($palavras as $key => $value)
    if (strstr($frase, $value) !== false) { $resultado = true; break; }
    return $resultado;
    }

  8. Deixei a funcao do post mais bonita e rapida, segue abaixo:

    function ArrayInStr($frase, $palavras) {
    foreach ($palavras as $chave => $palavra)
    if (strstr($frase, $palavra) !== false) { $resultado = true; break; }
    return $resultado;
    }

  9. Poxa, muito obrigado.. essa funcao me salvou.. procurei procurei e até que encontrei essa funcao! perfeita pro meu uso. muito obrigado!

  10. Muito boa, estava tentando fazer com array_keys_exists mas esta é bem melhor.
    Parabéns!!!

  11. Olá uma ajudinha como faço o mesmo com um arquivo txt

    Abraço.

  12. Muito bom mano ! ótima ideia e obrigado por compartilhar !

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.