Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia 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](http://sandbox.onlinephpfunctions.com/code/e7cfd27ea182041de0519df3ed22bedc93cda18b)Olá usuario181474618518,
Bom, entendi o que desejava fazer, então, criei um script referente ao que desejava.
Como foi o meu pensamento para chegar a esse resultado.
1 - Criar uma função para resolver o problema podendo reutilizar em outras áreas.
2- ter 3 parâmetros para utilizar a função, 1 o array de menu, o conteúdo em string(texto) e um array de caracteres não importantes.
Criação da função:
Os passos:
1 - Verificar se existe os caracteres a serem removidos do conteúdo.
2 - criar um array através do conteúdo, carácter escolhido ESPAÇO.
3 - Percorrer os o arrMenu e o conteúdo fazendo a comparação se o valor do menu e igual a cada item gerado do conteúdo.
4 - gerar a lista UL>LI caso exista o menu list.
5 - Remover os itens duplicados do arrayMenu
6 - Gera a lista
7 - Retornar a lista
Segue o script abaixo:
Observação:
Esses itens abaixo, e para ser personalizado com a url e como deseja mostrar cada item de menu.
$url = '#';
$list = $list;
<?php
$from = array(
0 => "Laranja",
1 => "Azul",
2 => "Vermelho",
3 => "Verde",
4 => "Black"
);
$conteudo = "Meu conteúdo Filmes Laranja e Verde. Blackout.";
$menuslist = listCategoryMenu($from,$conteudo, [ '.',',' ]);
echo $menuslist;
function listCategoryMenu(array $arrMenu, string $contents, array $arrRemove){
$contents = $contents;
$arrMenuList = null;
if(is_array($arrRemove) && sizeof($arrRemove) > 0 ):
$contents = str_replace($arrRemove,'',$contents);
endif;
$contents = explode(' ',$contents);
foreach($arrMenu as $keys => $values):
foreach($contents as $content):
if($values == $content):
$arrMenuList[] = $content;
endif;
endforeach;
endforeach;
$html = null;
if(is_array($arrMenuList) && sizeof($arrMenuList) > 0 ):
$arrMenuList = array_unique($arrMenuList);
$html .= '<ul>';
foreach($arrMenuList as $list):
$url = '#';
$list = $list;
$html .= sprintf('<li><a href="%s">%s</a></li>',$url,$list);
endforeach;
$html .= '</ul>';
endif;
return $html;
}
>
Em 28/02/2020 at 06:53, usuario181474618518 disse:
Bom dia 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](http://sandbox.onlinephpfunctions.com/code/e7cfd27ea182041de0519df3ed22bedc93cda18b)
Nenhuma pergunta é burra.
Indiferente com a escolha, você terá resultados bem similares... é um problema de escopo. A palavra que você procura pode estar em diferentes locais.
-
Início/meio/fim de frase;
-
Antes de pontuação (. , ! ? : ;);
-
Entre apóstrofos.
-
etc...
O mais fácil para resolver isso, seria utilizar uma marcação simples, tal qual
Back in [a]Black[/a]
E utilizar as marcações como delimitadores.
De outra forma, seria pegar todas as situações que podem ocorrer, e tratar cada uma independentemente.
Você pode começar com essa expressão regular e ir ampliando ela: