PHP, Substituir Elementos (Dicas str_replace_*)

28 11 2007

Seria esse post uma dica ? Sim.

Antes de mais nada uma breve explicação exemplificando o str_replace

str_replace("xx","no","xxdesign");

Resulta na substituição do termo “xx” por “no” na string “xxdesign” resultando em “nodesign”.

1 ) Substituir apenas um elemento encontrado

Normalmente me deparo com problemas do tipo:

REFX-11-MANUAL e quero obter REFX11-MANUAL

Onde preciso substituir apenas uma vez o “-” por “”

Inicialmente logo se procura a função str_replace, mais percebe-se que ela realiza a substituição de todos os traços “-” por vazio “”, ou seja todos os elemento encontrado serão substituidos, mais então como controlar isso:

Eu até pensei em criar uma função básica para substituir apenas um elemento, mais para não reinventar a roda existe uma função muito boa criada por jmack e distribuída através de um post no manual da função str_replace dentro do próprio site do php.

function str_replace_once($search, $replace, $subject)
{
if(($pos = strpos($subject, $search)) !== false)
{
$ret = substr($subject, 0, $pos).$replace.substr($subject, $pos + strlen($search));
}
else
{
$ret = $subject;
}
return($ret);
}

Onde temos o seguinte:

echo str_replace_once("-","","REFX-11-MANUAL");
// Resulta em REFX11-MANUAL

Em controvérsia temos:

echo str_replace("-","","REFX-11-MANUAL");
// Resultando em REFX11MANUAL

Lembrando que a substituição ocorre da esquerda pra direita.

2 ) Substituir elementos recursivamente

Uma outra função interessante é a de Howard Yeend que facilitaem muito a vida de usuários que desejam manipular recursivamente os elesmentos.

A idéia dele é a seguinte, imagine o seguinte, se voce quiser substituir “–” por “-” dentro de “—–” voce teria como resultado no str_replace “—” pois só existe dois pares de “–” sendo assim a função recursiva trata da seguinte forma: Sobrou “—” então continue a procura por “–” resultando em “-”, é bem interessante a função, aqui vai ela exemplificada:

/*
a function to replace *all* occurrences of $search
(aka recursive str_replace)

echo str_replace("--","-","a-b--c---d------e");
returns [a-b-c--d---e]
echo str_replace_all("--","-","a-b--c---d------e")."<br />";
return [a-b-c-d-e]
*/
function str_replace_all($search,$replace,$subject) {
while(
strpos($subject,$search)!==false) {
$subject = str_replace($search,$replace,$subject);
}
return
$subject;
}

echo str_replace("--","-","a-b--c---d------e")."<br />";
echo
str_replace_all("--","-","a-b--c---d------e")."<br />";

Referência:

http://br.php.net/str_replace


Ações

Informações

3 respostas

19 03 2008
Carlos Eduardo

gostaria de mudar a cor de um string dentro de uma palavra.

usando str_replace vejo que seria possivel…

ex.: procuro a palavra “edu” dentro de uma string e essa teria “uma Educação perfeita” … gostaria que a string edu ficasse em outra cor diferente da frase

13 11 2009
EuTeViMix Comunicação

Substituir o texto pelo texto com a cor especificada: Para Carlos Eduardo

str_replace(“edu”,”edu”,”O edu é bla bla bla”);

Você pode usar variáveis ou CSS para facilitar a alteração das cores de acordo com o layout de onde se deseja aplicar… Boa sorte..

Qualquer coisa envie um email eutevimix

Valeu galera,

13 11 2009
EuTeViMix Comunicação

Não sabia que nao dava para mandar HTML mas tudo bem segue outro exemplo:

Substituir o texto pelo texto com a cor especificada: Para Carlos Eduardo

$newtext = { font color=ffcc00 } edu {/font}
// Onde tiver { substitua por de acordo com a posição

str_replace(“edu”,”$newtext”,”O edu é bla bla bla”);

Você pode usar variáveis ou CSS para facilitar a alteração das cores de acordo com o layout de onde se deseja aplicar… Boa sorte..

Qualquer coisa envie um email para www eutevimix com

Valeu galera,

Deixe um comentário