【问题标题】:get the array with html array path获取带有 html 数组路径的数组
【发布时间】:2011-02-25 05:02:01
【问题描述】:

嘿,我将输入元素interesse[angebote][flurfuerderfahrzeuge] 中的这个路径名作为我的 php var 中的字符串。现在我需要以某种方式转换它(使用正则表达式或explode()),所以它看起来像这样:$_POST['interesse']['angebote']['flurfuerderfahrzeuge'] 并使用eval() 来获取值。但我确信必须有一个更简单的方法来做到这一点。 有任何想法吗?谢谢!

【问题讨论】:

  • 对输入元素进行评估?那是在要求混乱,朋友。这是在要求混乱。

标签: php html arrays


【解决方案1】:

eval() 是 evil()。在这种情况下,有一些更快的选择可以避免它。

如果你只是想转换语法,那么我有一个正则表达式:

  $name = '$' . preg_replace("/\[([^\]]+)\]/", '["$1"]', $path);

如果您的输入字符串不仅包含路径,还包含一个值(如果必须附加一个虚拟值),那么您可以使用 parse_str() 将数组名称提取为真实的PHP 数组:

  $path = "whatever[subname][deepnesting]=1";
  parse_str($path, $as_var);
  print_r($as_var);

详细说明您的输入数据。


好的,刚刚明白你的意思。您想淹没在 $_POST 数组中。然后像这样使用逐步引用:

$path = "xxxx[yyyy][zzzz]";
$ref = & $_POST;

preg_match_all("/\w+/", $path, $uu);
foreach ($uu[0] as $subname) {
   $ref = & $ref[$subname];
}

print_r($ref);   // = $_POST[xxxx][yyyy][zzzz]

【讨论】:

  • 不,我没有输入,如果我有输入,这个 hack 将毫无意义。
  • 很棒的解决方案,谢谢。不知道你为什么使用引用。
【解决方案2】:

好吧,我知道它很简单,但我看起来很丑, 这就是我现在使用的:

    $path = 'interesse[angebote][flurfuerderfahrzeuge]';
    $post_var = '$_POST['.str_replace(']]', ']', str_replace('[', '][', $path));
    eval('$value = '.$post_var.';');
    echo $value;

【讨论】:

  • 你应该担心有人经过'interesse[angebote][flurfuerderfahrzeuge]; unlink("somefile");'
  • 哈哈我永远不会解析帖子数据:D。 $path 变量是我硬编码的。
  • 我明白了。我读了i have this path name from an input element 并假设它来自输入。
  • 你说得对,在 9 小时编程后提问是不明智的。
猜你喜欢
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-24
  • 2011-03-11
  • 2023-03-14
  • 1970-01-01
相关资源
最近更新 更多