Ir para o conteúdo
zero-cool

preg_replace de arrays

Mensagens Recomendadas

zero-cool    0
zero-cool

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,

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
MX+    0
MX+

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);
}

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
zero-cool    0
zero-cool

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,

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
zero-cool    0
zero-cool

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
Nazgulled    8
Nazgulled

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.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
pedrotuga    31
pedrotuga

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.

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


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade