Substituir array por array com preg_replace
28/02/2020
0
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:
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
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
Curtir tópico
+ 1
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:
Espero que ajude!! ;)
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
Clique aqui para fazer login e interagir na Comunidade :)