如何使用字符串在PHP中获取关联HTML数组的值?

时间:2016-09-22 20:38:13

标签: php regex string forms post

看,我有一个这样的表格:

<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)。

3 个答案:

答案 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?