Como obter o valor de uma matriz HTML associativa em PHP usando uma string?

Olhe, eu tenho um formulário como este:

Eu quero obter o valor da variable[var1][var2] em PHP usando uma string como:

 $str = "['variable']['var1']['var2']"; echo "{$_POST{$str}}"; 

Por que eu preciso fazer isso?

Eu preciso disso porque o código que obtém o valor é totalmente dynamic e não consigo obter ou definir manualmente o valor usando $_POST['variable']['var1']['var2'] .

Você pode ajudar?

NOTA : Sei que é possível obtê-lo usando $_POST['variable']['var1']['var2'] , não me pergunte por que não estou usando assim. Simplesmente eu preciso usar como acima (usando $str ).

Você pode usar preg_match_all() para obter todos os índices na cadeia em uma matriz:

 $indexes = preg_match_all('/(?<=\[\')(?:[^\']*)(?=\'\])/', $str); $indexes = $indexes[0]; // Get just the whole matches 

Em seguida, use um loop para perfurar em $_POST .

 $cur = $_POST; foreach ($indexes as $index) { $cur = $cur[$index]; } 

Neste ponto, $cur conterá o valor desejado.

Você está pensando demais. Qualquer coisa que você colocar na notação de matriz [] no nome de um campo de formulário simplesmente se tornará uma chave de matriz. O seguinte é LITERALMENTE tudo que você precisa:

  $val = $_POST['foo']['bar']['baz']['qux']; 

Você não pode usar uma seqüência de caracteres como um “endereço” na matriz, não sem hacks insensatamente feios como o eval , ou analisando a string e fazendo um loop para cavar na matriz.

É difícil acreditar que este é um requisito. Se você pudesse expandir mais o que você está tentando alcançar, alguém, sem dúvida, tem uma solução melhor. No entanto, eu ignorarei os odiadores eval = evil .

A ecoar:

 eval("echo \$_POST$str;"); 

Para atribuir a uma variável:

 eval("\$result = \$_POST$str;"); 

Se você está aberto a outra syntax, verifique como escrever getter / setter para acessar a matriz de vários níveis pelos nomes das chaves?