PHP, Substituir Elementos (Dicas str_replace_*)

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


7 Comentários on “PHP, Substituir Elementos (Dicas str_replace_*)”

  1. 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

  2. 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,

  3. 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,

  4. Silvio disse:

    $seu_texto = “uma Educação perfeita”;

    $seu_html = str_replace(“Edu”, “Edu”, $seu_texto);

    No caso acima o texto vai sair em azul, para um caso está ótimo, mas para o caso geral sugiro que utilize uma combinação de funções para fazer um algoritmo onde ele ache a posição onde está a sentença a ser substituida, copie ela tal como está lá para um buffer (note que pode estar com casos direntes, exemplo Edu, eDU, edu, etc) e aplique o formato de forma semelhante a que eu coloquei acima.
    Um detalhe é que dependendo do que você esteja tentando fazer, talvez vai ter que substituir as cores de muitas palavras. Dai é o caso do algoritmo procurar palavras num vetor. Neste caso, dependendo do tamanho do texto, é bom procurar uma técnica otimizada para isso.

    • Silvio disse:

      O wordpress acabou podando a minha linha de comando, vou listar aqui o segundo parâmetro da função str_replace referênte ao meu comando:

      Edu

      • Silvio disse:

        O wordpress acabou podando a minha linha de comando, vou listar aqui o segundo parâmetro da função str_replace referênte ao meu comando:


        menor que
        tag_span
        parametro_style igual
        barra invertida

        css_color: css_blue
        barra invertida

        maior que
        Edu
        menor que
        \
        tag_span
        maior que


Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s