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

Uma resposta

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

Deixe um comentário