Substituir array por array com preg_replace

28/02/2020

0

PHP

Bom tarde a todos!

Estou iniciando em PHP, então talvez isso seja uma pergunta burra. Estou utilizando uma plataforma que fornece um array de categorias como digitado abaixo, e minha ideia é fazer uma busca no conteúdo por essas categorias, e substituir elas por outro array, que no caso terá as mesmas categorias, no entanto, com links. Veja:

$conteudo = "Meu conteúdo Filmes Laranja e Verde. Blackout.";

$from = array(
	0 => "Laranja",
	1 => "Azul",
	2 => "Vermelho",
	3 => "Verde",
	4 => "Black"
);

$to = array(
	0 => "<a href='#laranja'>Laranja</a>",
	1 => "<a href='#azul'>Azul</a>",
	2 => "<a href='#vermelho'>Vermelho</a>",
	3 => "<a href='#verde'>Verde</a>",
	4 => "<a href='#ver'>Black</a>"
);

$novoconteudo = strtr($conteudo, array_combine($from, $to));

echo $novoconteudo;


O máximo que conseguir fazer foi usando strtr, no entanto acaba fazendo algumas substituições "burras", como por exemplo adicionar link em "Black" quando na verdade a palavra é "Blackout". Acredito que para resolver isso, deveria ser feito com preg_replace, porém já tentei e não consegui. Alguém pode me ajudar?

Veja: http://sandbox.onlinephpfunctions.com/code/e7cfd27ea182041de0519df3ed22bedc93cda18b
Ericki

Ericki

Responder

Posts

27/03/2020

João Rolim

Boa tarde!

Não sei se você consegue trabalhar no seu array $from para fazer algumas modificações (incluir word boundaries)...
Se conseguir, dá pra usar o preg_replace dessa forma:

// https://www.php.net/manual/en/function.preg-replace.php
// https://stackoverflow.com/questions/40903786/need-to-replace-the-exact-match-only-using-preg-replace

$string = "Meu conteúdo Filmes Laranja e Verde. Blackout.";

$patterns = array(
    0 => "/\\bLaranja\\b/",         // usando word boundaries 
    1 => "/\\bAzul\\b/",
    2 => "/\\bVermelho\\b/",
    3 => "/\\bVerde\\b/",
    4 => "/\\bBlack\\b/"
);

$replacements = array(
    0 => "<a href='#laranja'>Laranja</a>",
    1 => "<a href='#azul'>Azul</a>",
    2 => "<a href='#vermelho'>Vermelho</a>",
    3 => "<a href='#verde'>Verde</a>",
    4 => "<a href='#black'>Black</a>"
);

echo preg_replace($patterns, $replacements, $string);



Espero que ajude!! ;)
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar