Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal
Tenho uma tabela no banco de dados chamada palavras com várias palavras cadastrada. E uma varialvel $frases.
Como eu faço para saber se todas as palavras desta frase está cadastrada no banco de dados?
>
15 horas atrás, Frank K Hosaka disse:
<?php
// mysql tbpalavras (id,palavra); tbfrases (id,frase)
$frases="The book is on the table.";
echo "frase: <b>$frases</b><br>";
$mysqli=new mysqli("localhost","root","","laravel");
$query=$mysqli->query("select palavra from tbpalavras");
$rows=$query->fetch_all(MYSQLI_ASSOC);
$palavras=[];foreach($rows as $row){
$palavras[]=$row['palavra'];}
$vetores=explode(" ",$frases);
echo "Palavras não cadastradas: <br>";
foreach($vetores as $vetor){
$subvetor=$vetor;
$subvetor=str_replace('.','',$subvetor);
$subvetor=str_replace(',','',$subvetor);
$subvetor=str_replace(';','',$subvetor);
if(!array_search($subvetor,$palavras)){
echo "$subvetor <br>";}}
O primeiro elemento do array $palavras não pode ser uma palavra comum como "café" em virtude da natureza da função array_search. Se uma frase conter a palavra "café", o array_search vai devolver a posição desse array que é 0, e esse valor é o mesmo que ele devolve quando não encontra uma palavra que procura. Para evitar a confusão entre a posição e a resposta do array_search é que eu criei essa bela gambiarra.
Testei o código aqui e está funcionando. Porém tem 2 problemas: 1 é com relação a letras maiúsculas. Se a palavra **eu** estiver cadastrada com letras minusculas e na frase estiver com letras maiúsculas ele reconhece como não cadastrada. O segundo problema é com relação a última palavra da frase. Mesmo a palavra estando cadastrada ele reconhece como não cadastrada. Tem com contornar isso?// errei aqui
>
19 horas atrás, landerbadi disse:
Testei o código aqui e está funcionando. Porém tem 2 problemas: 1 é com relação a letras maiúsculas. Se a palavra eu estiver cadastrada com letras minusculas e na frase estiver com letras maiúsculas ele reconhece como não cadastrada. O segundo problema é com relação a última palavra da frase. Mesmo a palavra estando cadastrada ele reconhece como não cadastrada. Tem com contornar isso?
<?php
$mysqli=new mysqli("localhost","root","","laravel");
$frases="The book is on the table";
$palavras=['_'];
$query=$mysqli->query("select * from tbpalavras");
$rows=$query->fetch_all(MYSQLI_ASSOC);
foreach($rows as $row){
$palavras[]=$row['palavra'];}
$vetores=explode(" ",$frases);
echo "Palavras não cadastradas no vetor de palavras";
foreach($vetores as $vetor){
$subvetor=trim($vetor);
$subvetor=str_replace('.','',$subvetor);
$subvetor=str_replace(',','',$subvetor);
$subvetor=str_replace(';','',$subvetor);
$Subvetor=ucfirst($subvetor);
$subvetor=strtolower($Subvetor);
if(!array_search($subvetor,$palavras) && !array_search($Subvetor,$palavras)){
echo "$subvetor <br>";}}Se eu entendi direito a pergunta você pode está usando o operador LIKE
<?php
// mysql tbpalavras (id,palavra); tbfrases (id,frase)
$palavras[]="_"; // gambiarra do Frank