使用变量访问多维 $_POST


Using variable to access multidimensional $_POST

请考虑以下代码:

$var = 'test';
$_POST[$test]; // equals $_POST['test']

如何使用相同的方法访问此变量:

$_POST['test'][0];

$var = 'test[0]';显然行不通。

编辑

让我提供更多的信息。我有一个构建表单的类。
添加的元素如下所示:

//$form->set_element(type, name, defaultValue);
$form->set_element('text', 'tools', 'defaultValue');

这导致:

<input type="text" name="tools" value="defaultValue" />

在我的类中,我设置了值:如果表单已发布,请使用该值,如果没有,则使用默认值:

private function set_value( $name, $value='' ) {
    if( $_SERVER['REQUEST_METHOD'] == 'POST' )
        return $_POST[$name];
    else 
        return $value;
}

当我想添加多个"工具"时,我想使用:

$form->set_element('text', 'tools[0]', 'defaultValue');
$form->set_element('text', 'tools[1]', 'defaultValue');
$form->set_element('text', 'tools[2]', 'defaultValue');

但在set_value函数中 这给了$_POST['tools[0]']而不是$_POST['tools'][0]

[]中使用任意数量的变量来访问所需的内容:

$test = 'test';
$index = 0;
var_dump($_POST[$test][$index]);
$test = 'test';
$index = 0;
$subkey = 'key'
var_dump($_POST[$test][$index][$subkey]);

等等。

没有特殊的功能来实现你想要的,所以你应该写一些东西,例如:

$key = 'test[0]';
$base = strstr($key, '[', true); // returns `test`
$ob_pos = strpos($key, '[');
$cb_pos = strpos($key, ']');
$index = substr($key, $ob_pos + 1, $cb_pos - $ob_pos - 1);
var_dump($arr[$base][$index]);

由LinkinTED编辑

$key = 'test[0]';
$base = $n = substr($name, 0, strpos($key, '[') );
preg_match_all('/'[([^']]*)']/', $key, $parts);
var_dump($arr[$base][$parts[1][0]]);

看看你什么时候做了$_POST['test'][0];,你只是在最后添加了[0]?作为单独的参考。

你必须这样做。

$_POST[$test][0];

如果你需要在变量中同时使用这两个部分,那么你需要使用多个变量或数组。

$var = Array( "test", "0" );
$_POST[$test[0]][$test[1]];
数组

的每个维度都是通过指定数组变量一起指定keyindex来调用的。

您可以通过提及数组的 3 个索引来引用三维数组的元素。

$value = $array['index']['index']['index'];

喜欢

$billno = $array['customers']['history']['billno'];

您还可以使用具有在指定数组索引时使用的索引值的变量。

$var1 = 'customers';
$var2 = 'history';
$var3 = 'billno';
$billno = $array[$var1][$var2][$var3];