Jump to content


Photo

E.r.


  • Faça o login para participar
4 replies to this topic

#1 pchardnet

pchardnet

    ×-× 3D ×-×

  • Usuários
  • 1068 posts
  • Sexo:Não informado
  • Localidade:Belo Horizonte-MG

Posted 19/09/2005, 17:22

Moçada, estou com um probleminha numa ER que estou usando (by vidaloka)

Ela funcionava, mas tive que fazer uma mudança e agora ela não atende.

<?
 $palavra = "%daniel%silva%";
  $nome = "Daniel Ferreira Silva";
  
$palavras = explode('%', $palavra);

foreach($palavras as $palavra)
{
 $nome = preg_replace('~(.*?)(' . $palavra . '?)(.*?)~i', '\\1<strong>\\2</strong>\\3', $nome);
}
echo $nome;
?>

Preciso que a impressão seja Daniel Ferreira Silva

Esta ER está dentro de um while.

Alguém sabe como posso resolver? (y)

Edição feita por: pchardnet, 19/09/2005, 17:24.

www.wvirtu.net - Hospedagem Sites - PHP + MySql + Fantástico - Joomla! pré-instalado

www.joomlaminas.org - Grupo de Usuários Joomla! de Minas Gerais

#2 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 19/09/2005, 17:45

Vamos ver se eu não postando o código tu descobre ... :P

Seguinte: como o resultado do explode() do texto %daniel%silva% irá gerar alguns valores (específicamente 2) em branco no array $palavras, tu terá de verificar, dentro do foreach(), se $palavra é nula. Se ela não for, ou seja, possuir algum valor, tu aplica o preg_replace(), caso contrário, não faz nada. :)

[]’s :DAté mais

#3 pchardnet

pchardnet

    ×-× 3D ×-×

  • Usuários
  • 1068 posts
  • Sexo:Não informado
  • Localidade:Belo Horizonte-MG

Posted 19/09/2005, 17:56

Segui o raciocínio + ou - e fiz esta verificação antes.

<?
$palavra = "%daniel%silva%";
$palavra = preg_replace("/[_\W]/"," ", $palavra);
$palavra = trim($palavra);

$nome = "Daniel Ferreira Silva";


$palavras = explode(" ", $palavra);

foreach($palavras as $palavra)
{
$nome = preg_replace('~(.*?)(' . $palavra . '?)(.*?)~i', '\\1<strong>\\2</strong>\\3', $nome);
}

echo $nome;

?>


Imprimiu como eu queria, neste script de teste, mas no corpo do meu programa não negrita as duas palavras.

A minha variável $nome recebe do BD e geralmente vem mais de um. Isso interfere?


## Edit ##

Consegui fazer que negritasse, mas só ocorre com o primeiro nome listado. Nos demais só negrita a segunda palavra.

## Edit ##

Funcionou... Era só colocar o explode fora do While


Thank's

Edição feita por: pchardnet, 19/09/2005, 18:49.

www.wvirtu.net - Hospedagem Sites - PHP + MySql + Fantástico - Joomla! pré-instalado

www.joomlaminas.org - Grupo de Usuários Joomla! de Minas Gerais

#4 CSFInfo

CSFInfo

    Normal

  • Usuários
  • 81 posts
  • Sexo:Não informado

Posted 19/09/2005, 22:41

Testa ai

$nome = "Daniel Ferreira Silva";
$palavra = "%daniel%silva%";
$palavras = str_replace("%","|", $palavra);
echo preg_replace("/($palavras)/i", "<strong>\\0</strong>",$nome);


#5 Paulo Freitas

Paulo Freitas

    ××××××× LRU #456504 ××××××× ××××××× LRM #364686 ×××××××

  • Ex-Admins
  • 5612 posts
  • Sexo:Masculino
  • Localidade:Campinas - SP

Posted 20/09/2005, 00:02

Opa ... ;)

Tu não captou o que eu disse, mas tudo bem ... :P

Eu tinha sugerido isto, veja ... :rolleyes:

<?
$palavra = "%daniel%silva%";
$nome = "Daniel Ferreira Silva";

$palavras = explode('%', $palavra);

foreach($palavras as $palavra)
{
if(!empty($palavra)){
$nome = preg_replace('~(.*?)(' . $palavra . '?)(.*?)~i', '\\1<strong>\\2</strong>\\3', $nome);
}
}
echo $nome;
?>

Simples assim ! :)

PS: Mas é óbvio que a solução do CSFInfo é um tanto quanto mais robusta que a minha ... é que eu preferi fazer num modo mais entendível possível ... :P

[]’s :DAté mais




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq