阻止PHP在$ _POST超全局中创建数组

cdm*_*kay 3 html php forms superglobals

PHP会自动转换

<input type="text" name="foo[0]" value="x" />
<input type="text" name="foo[1]" value="y" />
Run Code Online (Sandbox Code Playgroud)

$_POST['foo'] = array(
    0 => 'x', 
    1 => 'y'
);
Run Code Online (Sandbox Code Playgroud)

这是你大多数时候想要的.但是,在这种情况下,我希望不会发生这种情况.有没有告诉PHP不这样做?

我意识到我可以解析php://input自己,但如果我能避免它,我宁愿不这样做.

我也没有重命名输入名称的选项.

mar*_*kus 9

通过使用括号,[]您明确告诉PHP创建一个数组,只是不要使用括号:

<input type="text" name="foo_0" value="x" />
<input type="text" name="foo_1" value="y" />
Run Code Online (Sandbox Code Playgroud)

这些字段将在$ _POST数组中作为$_POST['foo_0']和提供$_POST['foo_1'].

如果你没有对标记产生影响(这很奇怪,因为你总是可以改变它们的客户端),你需要展平数组.

$post = array();

foreach ($_POST as $key => $value) {
    if (!is_array($value)) {
        $post[$key] = $value;
    } else {
        foreach ($value as $foo => $item) {
            $post[$foo] = $item;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

或者阅读关于阵列展平的一些很好的输入.

  • 不幸的是,我无法修改输入名称。 (2认同)