Coincidência de palavras [Ajuda]

  • Autor Autor drop4
  • Data de início Data de início
Tradução em andamento: em alguns minutos este tópico estará em português. Por enquanto, o conteúdo está no original em espanhol. Ver original
D

drop4

Alfa
Usuário com poucas negociações! Use sempre o saldo do ForoBeta!
Buenas a todos, necesito filtrar ciertas palabras pero tengo un problema con los plurales.

Este es mi codigo:
PHP:
  $coincidencia_palabra = array['tecnico', 'tecnicos', 'sueldos'];
  $palabras ='tecnicos, sueldo';

  foreach ($coincidencia_palabra as $key => $type) {
        $coincidencias = strstr($palabras , $type);
        if ($coincidencias == true) {
          echo $type;
        }
   }

Me devuelve esto
tecnico, tecnicos, sueldos

Pero necesito que si detecta una palabra no la vuelva a detectar aunque sea plural, por lo que si detecta tecnico, se salte tecnicos y entonces quede tal que así:

tecnico, sueldos

Gracias por sus ayudas.
 
Foi útil? Participe da conversa

Com sua conta grátis você pode responder, mandar mensagem privada ao autor e comprar com Saldo retido: o pagamento é liberado quando você recebe o combinado.

Leva 30 segundos · você volta a este tópico ao terminar
probaste usar array_unique — Elimina valores duplicados de un array ??
 
array_unique los considera idénticos así string===string .por lo tanto no te sirve.
Puedes contar las letras de los dos strings algo así:
string1=7
string2=8
entonces si las 7 letras de string1 las tiene string2 lo puedes considerar palabras iguales.
Si solo es para plural/singular puedes considerar iguales si al string que tiene mas letras le quitas la ultima o las dos ultimas letras y string1 === string2:
 
Última edição:
Tendrías que tener un array de relación de palabras con su plural o tener condiciones con todas las reglas de pluralización.
 
Gracias a todos por darme ideas, al final lo he conseguido con la funcion similar_text(), permite dar un % de igualdad.

Muchas gracias como siempre amigos.
 
Gracias a todos por darme ideas, al final lo he conseguido con la funcion similar_text(), permite dar un % de igualdad.

Muchas gracias como siempre amigos.
Para evitar posibles falsos positivos podrías usar este código:
PHP:
<?php
$palabras = array('sueldos', 'tecnico', 'tecnicos', 'sueldo', 'cafe');
$palabras_a_buscar = array('sueldo', 'tecnico');
foreach($palabras_a_buscar as $palabra_a_buscar){
    if($matches = preg_grep("/$palabra_a_buscar(s)?\b/i", $palabras)) {
        echo 'Palabra encontrada: '.current($matches).'<br/>';
    }
}

Esto imprimiría:
Inserir CODE, HTML ou PHP:
Palabra encontrada: sueldos
Palabra encontrada: tecnico


O si también quieres ir eleminando las palabras encontradas del array, puedes usar algo así:
PHP:
<?php
$palabras = array('sueldos', 'tecnico', 'tecnicos', 'sueldo', 'cafe');
$palabras_a_buscar = array('sueldo', 'tecnico');
foreach($palabras_a_buscar as $palabra_a_buscar){
    if($matches = preg_grep("/$palabra_a_buscar(s)?\b/i", $palabras)) {
        echo 'Palabra encontrada: '.current($matches).'<br/>';
        foreach($matches as $key => $value){
            unset($palabras[$key]);
        }
    }
}

echo 'Array $palabras: <br/>';
print_r($palabras);

Esto devolvería:
Inserir CODE, HTML ou PHP:
Palabra encontrada: sueldos
Palabra encontrada: tecnico
Array $palabras: 
Array ( [4] => cafe )
 
PHP:
<?php
$palabras = array('sueldos', 'tecnico', 'tecnicos', 'sueldo', 'cafe');
$palabras_a_buscar = array('sueldo', 'tecnico');
foreach($palabras_a_buscar as $palabra_a_buscar){
    if($matches = preg_grep("/$palabra_a_buscar(s)?\b/i", $palabras)) {
        echo 'Palabra encontrada: '.current($matches).'<br/>';
        foreach($matches as $key => $value){
            unset($palabras[$key]);
        }
    }
}

echo 'Array $palabras: <br/>';
print_r($palabras);


Muy buena la solución,
Por cierto aperpen me ha gustado tu web.
Me he pasado media vida mirando paginas como la tuya.
Es raro raro raro ver por aqui una pagina que no sea xxx warez o similar.
 
Última edição:
PHP:
<?php
$palabras = array('sueldos', 'tecnico', 'tecnicos', 'sueldo', 'cafe');
$palabras_a_buscar = array('sueldo', 'tecnico');
foreach($palabras_a_buscar as $palabra_a_buscar){
    if($matches = preg_grep("/$palabra_a_buscar(s)?\b/i", $palabras)) {
        echo 'Palabra encontrada: '.current($matches).'<br/>';
        foreach($matches as $key => $value){
            unset($palabras[$key]);
        }
    }
}

echo 'Array $palabras: <br/>';
print_r($palabras);


Muy buena la solución,
Por cierto aperpen me ha gustado tu web.
Me he pasado media vida mirando paginas como la tuya.
Es raro raro raro ver por aqui una pagina que no sea xxx warez o similar.

Lo mismo digo.. acabo de ver su web y la verdad es que se ve muy interesante
 
Voltar
Topo