• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

zero-cool

preg_replace de arrays

10 mensagens neste tópico

Viva,

Estou a tentar põr isto a funcionar mas ainda não consegui. O que estou a fazer mal?

$tlang = array();
$tlang[1] = "a";
$tlang[2] = "b";
$buffer = "{1} e {2}";
echo preg_replace("/{(.*)}/", "'_'.$tlang['\\1'].'_'", $buffer);

Dá-me este erro:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING

Abraços,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Provavelmente ele quer substituir dinamicamente um buffer/pares de valores.

Acho que podias tentar utilizar isto:

$tlang = array();
$tlang[1] = "a";
$tlang[2] = "b";
$buffer = "{1} e {2}";

foreach ($tlang as $key => $value)
{
  str_replace( '{' . $key . '}', $value, $buffer);
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O vsprintf faz exactamente aquilo que ele esta a tentar fazer com o código dele...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não sabia que existia esse Vsprintf  :P

Sim torna tudo mais simples.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não me apetece analisar o código, mas porque não usares antes:

http://www.php.net/manual/en/function.vsprintf.php

Provavelmente ele quer substituir dinamicamente um buffer/pares de valores.

Exacto, pelo que estive a ver o vsprint não permite ir buscar um valor a uma lista por substituição. Se trocar a ordem do {1} e {2} o vsprint já não actuaria, correcto?

Abraço,

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que podias tentar utilizar isto:

$tlang = array();
$tlang[1] = "a";
$tlang[2] = "b";
$buffer = "{1} e {2}";

foreach ($tlang as $key => $value)
{
  str_replace( '{' . $key . '}', $value, $buffer);
}

Queria evitar a utilização de ciclos, pois utilizam cpu desnecessário para grandes listas uma vez que têm que analisar para cada par da lista o buffer todo e fazer as respectivas substituições caso existam.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Acho que a questão é, será que realmente precisas de ter um controlo sobre a ordem? Ou seja, será mesmo necessário ter os argumentos numerados e substituídos pela posição respectiva do array?

Se construíres o array correctamente, não tens te preocupar com essa troca de argumentos. De qualquer forma, se precisas de especificar certos argumentos podes usar o sprintf() que usa um número argumentos variável em vez de um array.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

E que tal ler a mensagem de erro? É um erro de sintaxe.

Tens um literal inválido dentro de um indice de um array. Isso não é PHP válido.

Em concreto é isto que tens mal:

$tlang['\\1']

não faço ideia do que estejas a tentar  fazer, mas $tlang['\\1'] não é php válido.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estou a tentar substituir cada

{x} por $tlang[x]

(teve que ser em code por [ x ] não é aqui apresentado correctamente

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora