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, boa tarde
Tenho um banco de dados as seguintes tabelas:
Verbos
Plural
Frases
Palavras
01 -Na tabela palavras eu irei escolher uma palavra. Preciso que o php liste frases da tabela frases que contenham esta palavra.
2 - Na tabela verbos irá conter variações dessa palavra caso ela seja um verbo. Por exemplo: a palavra fazer ela é um verbo. Sendo assim ela terá variações como: fiz, farei, faria, etc. Para organizar isso eu criei na tabela verbos os seguintes campo id, palavra_id e palavra. Onde palavra_id é o id da palavra fazer. Segui este mesmo padrão para a tabela plural.
3 - Eu preciso que ele liste frases com a palavra e com suas variantes. Por exemplo: na frase " Eu vou fazer café" ele iria listar pois contém a palavra fazer. Porém se houver no banco de dados a frase "Eu fiz cafe" ele também tem que listar pois fiz é uma variante de fazer.
4 - Após fazer essa listagem eu preciso que ele coloque em negrito as palavras que nao existem no banco de dados. Por exemplo se em todo o banco de dados a palavra café nao existir ele precisa colocar esta palavra em negrito.
Alguém poderia me ajudar por favor?
Fase 1: tentando negritar a palavra 'vou'
<?php
$palavras=["_","vou"];
$frase="Eu vou fazer café.";
$vetores=explode(" ",$frase);
foreach($vetores as $vetor){
if(array_search($vetor,$palavras)){
echo "<b>$vetor </b>";} else {
echo $vetor." ";}}
Não dá para colocar a palavra 'vou' logo no começo do vetor $palavras.
O array_search retorna a posição da palavra 'vou' como inteiro 0 que
matematicamente tem o mesmo valor de falso. Para contornar o problema,
eu criei uma palavra fictícia no começo do vetor $palavras.
Fase 2: tentando negritar a palavra 'café.'
<?php
$palavras=["_","vou","eu","Eu","EU","fazer","faço","fazem","Café","café","CAFÉ"];
$frase="Eu vou fazer café.";
$vetores=explode(" ",$frase);
foreach($vetores as $vetor){
$subvetor=$vetor;
$subvetor=str_replace('.','',$subvetor);
$subvetor=str_replace(',','',$subvetor);
$subvetor=str_replace(';','',$subvetor);
if(array_search($subvetor,$palavras)){
echo "<b>$vetor </b>";} else {
echo $vetor." ";}}
Esse deu trabalho, eu pensei que o str_replace não estava funcionando,
mas eu vi que o problema estava na lógica.
Fase 3: trabalhando com MySQL
<?php
// mysql tbpalavras (id,palavra); tbfrases (id,frase)
$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'];}
$query=$mysqli->query("select frase from tbfrases"); $frase=$row['frase'];
$vetores=explode(" ",$frase);
foreach($vetores as $vetor){
$subvetor=$vetor;
$subvetor=str_replace('.','',$subvetor);
$subvetor=str_replace(',','',$subvetor);
$subvetor=str_replace(';','',$subvetor);
if(array_search($subvetor,$palavras)){
echo "<b>$vetor </b>";} else {
echo $vetor." ";}}}
No mundo real não existe dicionário de verbo, dicionário de substantivo
e dicionário de adjetivo, logo basta apenas duas tabelas, uma com as
frases e outra com as palavras. Mas se for importante destacar a função
da palavra, basta abrir um campo na tbpalavras com o nome de função, tipo:
id=1, "_",gambiarra do Frank
id=2, "vou", v.
id=3, "inteligente', a.
id=4, "sapato", s.
<?php
// Texto.
$publicacaoStrip = 'teste -teste- arr-o-z';
// Expressão negrito.
$reNegrito = '/-([^-]+?)-/';
// Expressão itálico.
$reItalico = '/\([^\]+?)\*/';
// Sintaxe de substituição de expressão regular, para negrito.
$replacementNegrito = '<b>$1</b>';
// Sintaxe de substituição de expressão regular, para itálico.
$replacementItalico = '<i>$1</i>';
// Opera a substituição das ocorrências da(s) expressão(ões) regular(es) pelo seu substituto.
$publicacaoStrip = preg_replace(array($reNegrito, $reItalico),
array($replacementNegrito, $replacementItalico),
$publicacaoStrip);
// Ecoa e termina a execução do php.
die($publicacaoStrip);
?>>
Em 30/05/2023 at 21:35, Frank K Hosaka disse:
Fase 1: tentando negritar a palavra 'vou'
<?php
$palavras=["_","vou"];
$frase="Eu vou fazer café.";
$vetores=explode(" ",$frase);
foreach($vetores as $vetor){
if(array_search($vetor,$palavras)){
echo "<b>$vetor </b>";} else {
echo $vetor." ";}}
Não dá para colocar a palavra 'vou' logo no começo do vetor $palavras.
O array_search retorna a posição da palavra 'vou' como inteiro 0 que
matematicamente tem o mesmo valor de falso. Para contornar o problema,
eu criei uma palavra fictícia no começo do vetor $palavras.
Fase 2: tentando negritar a palavra 'café.'
<?php
$palavras=["_","vou","eu","Eu","EU","fazer","faço","fazem","Café","café","CAFÉ"];
$frase="Eu vou fazer café.";
$vetores=explode(" ",$frase);
foreach($vetores as $vetor){
$subvetor=$vetor;
$subvetor=str_replace('.','',$subvetor);
$subvetor=str_replace(',','',$subvetor);
$subvetor=str_replace(';','',$subvetor);
if(array_search($subvetor,$palavras)){
echo "<b>$vetor </b>";} else {
echo $vetor." ";}}
Esse deu trabalho, eu pensei que o str_replace não estava funcionando,
mas eu vi que o problema estava na lógica.
Fase 3: trabalhando com MySQL
<?php
// mysql tbpalavras (id,palavra); tbfrases (id,frase)
$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'];}
$query=$mysqli->query("select frase from tbfrases"); $frase=$row['frase'];
$vetores=explode(" ",$frase);
foreach($vetores as $vetor){
$subvetor=$vetor;
$subvetor=str_replace('.','',$subvetor);
$subvetor=str_replace(',','',$subvetor);
$subvetor=str_replace(';','',$subvetor);
if(array_search($subvetor,$palavras)){
echo "<b>$vetor </b>";} else {
echo $vetor." ";}}}
No mundo real não existe dicionário de verbo, dicionário de substantivo
e dicionário de adjetivo, logo basta apenas duas tabelas, uma com as
frases e outra com as palavras. Mas se for importante destacar a função
da palavra, basta abrir um campo na tbpalavras com o nome de função, tipo:
id=1, "_",gambiarra do Frank
id=2, "vou", v.
id=3, "inteligente', a.
id=4, "sapato", s.
Para testar o código eu cadastrei 3 frases. Eu vou fazer café, Eu vou fazer café amanhã e uma frase em inglês The book is on the table. E depois cadastrei as palavras: eu., vou, fazer, café.
Na frase em inglês nenhuma palavra ficou em negrito pois não tem essas palavras cadastradas. Até aí Ok. Já nas frases em português a primeira palavra de cada frase ele não coloca em negrito. Ele reconhece como se a palavra não existisse no banco de dados.
<?php
// mysql tbpalavras (id,palavra); tbfrases (id,frase)
$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'];}
$query=$mysqli->query("select frase from tbfrases"); $frase=$row['frase'];
$vetores=explode(" ",$frase);
foreach($vetores as $vetor){
$subvetor=$vetor;
$subvetor=str_replace('.','',$subvetor);
$subvetor=str_replace(',','',$subvetor);
$subvetor=str_replace(';','',$subvetor);
if(array_search($subvetor,$palavras)){
echo "<b>$vetor </b>";} else {
echo $vetor." ";}}}
Olá!
Embaçado sugerir alguma solução assim do zero.
Ajude-nos a te ajudar.
Se tiver o projeto no git, compartilhe aqui.
Se não puder compartilhar o projeto, compartilha pelo menos o trecho do database aqui:
https://www.db-fiddle.com
aí a gente pode ir montando queries pra te ajudar nessa solução