Capturar informações em um string
Boa noite,
Eu to com um problema que não sei como resolver. Vo explica abaixo.
$string1 = "Jose d silva"
$string2 = "Eu tav andando na rua em encontrei o jose da silva";
O que eu quero com isso, eu queria negrita ou marca o nome jose da silva que esta na string2, para isso eu estaria usando a string1 como referencia.
Será que alguem tem alguma ideia de como eu possa resolver este problema?
Eu to com um problema que não sei como resolver. Vo explica abaixo.
$string1 = "Jose d silva"
$string2 = "Eu tav andando na rua em encontrei o jose da silva";
O que eu quero com isso, eu queria negrita ou marca o nome jose da silva que esta na string2, para isso eu estaria usando a string1 como referencia.
Será que alguem tem alguma ideia de como eu possa resolver este problema?
comentários (0)
suspender
Lista de Respostas:
23/02/2010 7:09pm
(~15 anos atrás)
(~15 anos atrás)
Uma forma simples é com str_replace:
<?php $nome = 'abc'; $texto = 'Encontrei o abc na rua e o abc me chamou.'; echo destacar($texto, $nome); function destacar($texto, $palavra, $tag = 'strong') { $palavra_destaque = '<'.$tag.'>'.$palavra.'</'.$tag.'>'; return str_replace($palavra, $palavra_destaque, $texto); }
24/02/2010 6:54pm
(~15 anos atrás)
(~15 anos atrás)
Dara rubens tudo certo, isso eu já fiz, soh que eu queria uma coisa mais precisa. Tipo eu tenho o Jose d Silva. E dentro de um texto eu tenho Jose da Silva. Eu queria marca o Jose da Silva que esta dentro do texto, usando o Jose d Silva como referencia.
24/02/2010 9:46pm
(~15 anos atrás)
(~15 anos atrás)
Hugo, neste caso você quer uma coisa MENOS precisa. Afinal, a alternativa que passei pega o texto exato, e o que você quer é que tenha uma certa "tolerência".
Não sei pra que você quer isso, mas se é extremamente necessário, uma alternativa é usar a função similar_text. Ela avalia a semelhança entre duas strings e devolve na forma de porcentagem e a quantidade de caracteres iguais.
Veja a referência em:
http://br.php.net/manual/pt_BR/function.similar-text.php
Para montar o script, já é um pouco mais trabalhoso. Uma alternativa é essa abaixo, mas já adiando que podem ter muitos bugs, já que é um trabalho delicado sobre a string.
Não sei pra que você quer isso, mas se é extremamente necessário, uma alternativa é usar a função similar_text. Ela avalia a semelhança entre duas strings e devolve na forma de porcentagem e a quantidade de caracteres iguais.
Veja a referência em:
http://br.php.net/manual/pt_BR/function.similar-text.php
Para montar o script, já é um pouco mais trabalhoso. Uma alternativa é essa abaixo, mas já adiando que podem ter muitos bugs, já que é um trabalho delicado sobre a string.
<?php $nome = 'Jose d Silva'; $texto = 'Encontrei o Jose da Silva na rua e o Jose da Silva me chamou'; echo destacar($texto, $nome, 90); exit(0); /** * Destaca uma palavra no texto de acordo com um grau de tolerancia * @param string $texto Texto completo * @param string $palavra Texto usado como base de busca * @param float $tolerancia Grau de tolerancia de similaridade * @param string $tag Nome da tag usada para destaque * @return string Texto substituido */ function destacar($texto, $palavra, $tolerancia = 90, $tag = 'strong') { $tamanho_palavra = strlen($palavra); $tamanho_texto = strlen($texto); $primeira_letra = $palavra[0]; $ultima_letra = $palavra[$tamanho_palavra - 1]; $texto_saida = ''; $pos = 0; // Achar primeira letra for ($pos = 0; $pos < $tamanho_texto; $pos++) { if ($texto[$pos] != $primeira_letra) { $texto_saida .= $texto[$pos]; continue; } $tamanho_substr = 0; // Achar ultima letra for ($i = $pos + 1; $i < $tamanho_texto; $i++) { // Achou ultima letra if ($texto[$i] != $ultima_letra) { continue; } $tamanho = $i - $pos + 1; // Tamanho ainda menor que o tamanho da palavra if ($tamanho < $tamanho_palavra) { $tamanho_substr = $tamanho; // Tamanho igual ao tamanho da palavra } elseif ($tamanho == $tamanho_palavra) { $tamanho_substr = $tamanho; break; // Tamanho maior que o tamanho da palavra } else { // Se detectou um tamanho menor que a palavra if ($tamanho_substr) { // Obter tamanho mais proximo do tamanho da palavra ou o maior pedaco $t_menor = abs($tamanho_palavra - $tamanho_substr); $t_maior = abs($tamanho_palavra - $tamanho); $tamanho_substr = $t_menor < $t_maior ? $tamanho_substr : $tamanho; // Se nao detectou, usar o tamanho encontrado } else { $tamanho_substr = $tamanho; } break; } } // Se achou a ultima letra if ($tamanho_substr !== 0) { $substr = substr($texto, $pos, $tamanho_substr); } else { $substr = substr($texto, $pos); } // Obter similaridade similar_text($substr, $palavra, $porcentagem); // Se a similaridade eh maior que a tolerancia if ($porcentagem >= $tolerancia) { $texto_saida .= '<'.$tag.'>'.$substr.'</'.$tag.'>'; $pos += $tamanho_substr - 1; } else { $texto_saida .= $texto[$pos]; } } return $texto_saida; }