Jump to content
usuario181474618518

Substituir array por array com preg_replace

Recommended Posts

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

Share this post


Link to post
Share on other sites

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:

((?!\w)|[\t\n\r ])(?<word>black)(?!\w)

Ela não está completa, não cobre todas as possibilidade, mas cobre a maioria delas...

Share this post


Link to post
Share on other sites

 

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

 

 

 

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By mateus.andriollo
      Tenhos duas tabelas Cab e Itm, gostaria de listar s sequencia de cab e inserir em um array os itens pertencentes a elas, compo incomum idcab.
       
      Não consigo fazer, o array será para json
    • By arlindophp
      <?php
       
      function doPut($url, $fields)
      {
          $fields = (is_array($fields)) ? http_build_query($fields) : $fields;
       
          if ($ch = curl_init($url)) {
              curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
              curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($fields)));
              curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
              curl_exec($ch);
              //$resp = curl_exec($ch);
       
              $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
       
              curl_close($ch);
       
              return (int) $status;
          } else {
              return false;
          }
      }
       
      session_start();
      $s_chave = $_POST['edtChave'];
      $_SESSION['s_chave'] = $s_chave;
      $edtChave = $_POST['edtChave'];
       
      $edtCultura = $_POST['edtCultura'];
      $edtPraga = $_POST['edtPraga'];
      $edtDose = $_POST['edtDose'];
      $edtEspecificacao = $_POST['edtEspecificacao'];
      $edtAplicaTerrestre = $_POST['edtAplicaTerrestre'];
      $edtAplicarea = $_POST['edtAplicarea'];
      $edtIntseg = $_POST['edtIntseg'];
      $edtIntEntrada = $_POST['edtIntEntrada'];
      $edtDadosGerais = $_POST['edtDadosGerais'];
       
      $url = "www.api.site.com";
      echo 'Url = ' . $url;
      echo '<br>';
       
          $data_array2 = array();
          for ($i = 0; $i < 5; $i++) {
              $montagem_array = array(
                  'cultura' => $_POST['edtCultura'],
                  'praga' => $_POST['edtPraga'],
                  'dose' => $_POST['edtDose'],
                  'especificacao' => $_POST['edtEspecificacao'],
                  'aplicaterrestre' => $_POST['edtAplicaTerrestre'],
                  'aplicaerea' => $_POST['edtAplicarea'],
                  'intseg' => $_POST['edtIntseg'],
                  'intentrada' => $_POST['edtIntEntrada'],
                  'dadosgerais' => $_POST['edtDadosGerais'],
              );
       
              $data_array2[$i] = $montagem_array;
          }
       
          //$json = json_encode($data_array2);
       
      echo '<br>';
      echo 'Array convertido para formato json: ' . json_encode($data_array2);
      echo '<br>';
      //$data = $array_para_string;
      //echo $data.'+cultura=asdf&praga=asdf&dose=dasf&especificacao=sadf&aplicaterrestre=sadf&aplicaerea=asdf&intseg=2&intentrada=1&dadosgerais=sdaf';
       
      $header = array(
          'Authorization: falkdsjçlaskf'
       
      );
       
      //Nova tentativa 07/01/2022
      if (doPut($url, $data_array2) == 200) {
       
          echo 'Passou!';
          echo '<br>';
          echo json_encode($data_array2);
          echo '<br>';
      }
      // do something
      else {
          echo 'Não deu certo';
          echo '<br>';
          echo json_encode($data_array2);
          echo '<br>';
      }
      //Nova tentativa
       
      //header('location:jsonpostprodutobula_teste.php');
    • By arlindophp
      <?php
       
      function doPut($url, $fields)
      {
          $fields = (is_array($fields)) ? http_build_query($fields) : $fields;
       
          if ($ch = curl_init($url)) {
              curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
              curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Length: ' . strlen($fields)));
              curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
              curl_exec($ch);
              //$resp = curl_exec($ch);
       
              $status = curl_getinfo($ch, CURLINFO_HTTP_CODE);
       
              curl_close($ch);
       
              return (int) $status;
          } else {
              return false;
          }
      }
       
      session_start();
      $s_chave = $_POST['edtChave'];
      $_SESSION['s_chave'] = $s_chave;
      $edtChave = $_POST['edtChave'];
       
      $edtCultura = $_POST['edtCultura'];
      $edtPraga = $_POST['edtPraga'];
      $edtDose = $_POST['edtDose'];
      $edtEspecificacao = $_POST['edtEspecificacao'];
      $edtAplicaTerrestre = $_POST['edtAplicaTerrestre'];
      $edtAplicarea = $_POST['edtAplicarea'];
      $edtIntseg = $_POST['edtIntseg'];
      $edtIntEntrada = $_POST['edtIntEntrada'];
      $edtDadosGerais = $_POST['edtDadosGerais'];
       
      $url = "www.api.site.com";
      echo 'Url = ' . $url;
      echo '<br>';
       
          $data_array2 = array();
          for ($i = 0; $i < 5; $i++) {
              $montagem_array = array(
                  'cultura' => $_POST['edtCultura'],
                  'praga' => $_POST['edtPraga'],
                  'dose' => $_POST['edtDose'],
                  'especificacao' => $_POST['edtEspecificacao'],
                  'aplicaterrestre' => $_POST['edtAplicaTerrestre'],
                  'aplicaerea' => $_POST['edtAplicarea'],
                  'intseg' => $_POST['edtIntseg'],
                  'intentrada' => $_POST['edtIntEntrada'],
                  'dadosgerais' => $_POST['edtDadosGerais'],
              );
       
              $data_array2[$i] = $montagem_array;
          }
       
          //$json = json_encode($data_array2);
       
      echo '<br>';
      echo 'Array convertido para formato json: ' . json_encode($data_array2);
      echo '<br>';
      //$data = $array_para_string;
      //echo $data.'+cultura=asdf&praga=asdf&dose=dasf&especificacao=sadf&aplicaterrestre=sadf&aplicaerea=asdf&intseg=2&intentrada=1&dadosgerais=sdaf';
       
      $header = array(
          'Authorization: falkdsjçlaskf'
       
      );
       
      //Nova tentativa 07/01/2022
      if (doPut($url, $data_array2) == 200) {
       
          echo 'Passou!';
          echo '<br>';
          echo json_encode($data_array2);
          echo '<br>';
      }
      // do something
      else {
          echo 'Não deu certo';
          echo '<br>';
          echo json_encode($data_array2);
          echo '<br>';
      }
      //Nova tentativa
       
      //header('location:jsonpostprodutobula_teste.php');
    • By lezão
      Boa tarde, galera!
      Tudo bem com vcs?
       
      Estou precisando de uma limitador de palavras.
      Tenho um texto de 600 palavras e gostaria de que na pagina principal aparece se, apenas 30 palavras do texto.
      Achei esse codigo na innternet, mas ele não limita palavras, mas sim ele corta as palavras ficando assim:  "Tenho um texto de 600 palav..."
      ?php echo substr("$texto;", 0, 200); ? com uma variavel que limita as palavras ficaria assim: "Tenho um texto de 600 palavras". exibiria essas 6 palavras.
    • By mateus.andriollo
      Boa tarde,
      Tenho alguns campos numéricos q ao fazer uma select gostaria q retornasse uma legenda
       
      exemplo:
      Status: 0=Inativo / 1=Ativo Condição: 1=Funcionando / 2=Em manutenção / 3=Manutenção Interna   
      Seria algo assim, tenho varias tabelas com estes campos... mas tenho q ficar usando replace.
      Existe uma forma de criar uma função para isso? Nem q na função eu tenha que setar nome do campo, ficando assim:
      Legenda('Status',cadastro.status) 
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.