【问题标题】:How to get value of an associative HTML array in PHP using a string?如何使用字符串在 PHP 中获取关联 HTML 数组的值?
【发布时间】:2016-09-22 20:38:13
【问题描述】:

看我有这样的表格:

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

【问题讨论】:

  • 解析你的字符串并从中获取密钥。
  • $str = "variable.var1.var2"; 或类似的工作吗?
  • 我如何在 PHP 中做到这一点?

标签: php regex string forms post


【解决方案1】:

您可以使用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 将包含您想要的值。

【讨论】:

  • Warning: preg_match_all(): Compilation failed: unrecognized character after (?&lt; at offset 3 in C:\xampp\htdocs\dermaquality\test.php on line 7
  • 对不起,应该是$&lt;=
【解决方案2】:

你想多了。您在表单字段名称中放入[] 数组表示法的任何内容都将成为数组键。以下是您真正需要的:

<input name="foo[bar][baz][qux]" ... />

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

您不能将字符串用作数组中的“地址”,除非没有像 eval 这样的疯狂丑陋的黑客攻击,或者解析字符串并执行循环以挖掘数组。

【讨论】:

    【解决方案3】:

    很难相信这是一项要求。如果您可以更多地扩展您想要实现的目标,那么毫无疑问有人会有更好的解决方案。但是,我会忽略eval = evil 的仇恨者。

    回声:

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

    分配给变量:

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

    如果您对其他语法持开放态度,请查看How to write getter/setter to access multi-level array by key names?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-28
      • 1970-01-01
      相关资源
      最近更新 更多