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:
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