Как получить значение ассоциативного массива HTML в PHP с помощью строки?

Посмотрите, у меня есть такая форма:

<form method="post"> <input name="variable[var1][var2]" value="44"/> </form> 

Я хочу получить значение variable[var1][var2] в PHP, используя строку типа:

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

Зачем мне это нужно?

Мне нужно это, потому что код, который получает значение, полностью динамичен, и я не могу получить или установить вручную значение, используя $_POST['variable']['var1']['var2'] .

Вы можете помочь?

ПРИМЕЧАНИЕ . Я знаю, что это можно получить с помощью $_POST['variable']['var1']['var2'] , пожалуйста, не спрашивайте меня о том, почему я не использую этот способ. Просто мне нужно использовать как указано выше (используя $str ).

Вы можете использовать preg_match_all() чтобы получить все индексы в строке в массив:

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

Затем используйте цикл для сверления в $_POST .

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

В этот момент $cur будет содержать $cur значение.

Вы ПУТЬ переусердствовали. Все, что вы помещаете в нотацию [] массива в поле имени формы, просто станет ключом массива. Ниже приведено все, что вам нужно:

 <input name="foo[bar][baz][qux]" ... /> $val = $_POST['foo']['bar']['baz']['qux']; 

Вы не можете использовать строку в качестве «адреса» в массиве, не без безумно уродливых хаков, таких как eval , или синтаксический анализ строки и выполнение цикла для eval в массиве.

Трудно поверить, что это требование. Если бы вы могли больше расширить то, что вы пытаетесь достичь, у кого-то, несомненно, есть лучшее решение. Однако я проигнорирую eval = evil ненавистники.

Чтобы эхо:

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

Назначение переменной:

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

Если вы открыты для другого синтаксиса, проверьте, как написать getter / setter для доступа к многоуровневому массиву с помощью имен ключей?