看,我有一个这样的表格:
<form method="post">
<input name="variable[var1][var2]" value="44"/>
</form>
我希望使用类似以下字符串在PHP中获取variable[var1][var2]
的值:
$str = "['variable']['var1']['var2']";
echo "{$_POST{$str}}";
为什么我需要这样做?
我需要它,因为获取值的代码是完全动态的,我无法使用$_POST['variable']['var1']['var2']
手动获取或设置值。
你能帮忙吗?
注意:我知道可以使用$_POST['variable']['var1']['var2']
来获取它,请不要问我为什么不使用这种方式。我只需要使用上面的内容(使用$str
)。
答案 0 :(得分:2)
您可以使用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
将包含您想要的值。
答案 1 :(得分:0)
你想要过度思考它。您在表单字段名称中放入[]
数组表示法的任何内容都将成为数组键。以下是您所需要的所有内容:
<input name="foo[bar][baz][qux]" ... />
$val = $_POST['foo']['bar']['baz']['qux'];
你不能将字符串用作数组中的“地址”,不能没有像eval
这样疯狂的丑陋黑客,也不能解析字符串并进行循环挖掘数组。
答案 2 :(得分:-1)
很难相信这是一项要求。如果你可以进一步扩展你想要实现的目标,那么毫无疑问,有人会有更好的解决方案。但是,我会忽略eval = evil
仇恨。
回应:
eval("echo \$_POST$str;");
分配给变量:
eval("\$result = \$_POST$str;");
如果您对另一种语法持开放态度,请选中How to write getter/setter to access multi-level array by key names?