表单输入字段名称包含方括号,如字段[index]

时间:2010-12-28 03:39:19

标签: php forms

我见过很多处理表单输入的PHP代码,输入字段名称包含方括号。据我所知,当PHP脚本检查$ _POST变量时,这会以某种方式导致PHP数组。

示例HTML:

<form action='http://zzz.com' method='post'>
    <input name='fruit[1]' value='apple' />
    <input name='fruit[2]' value='banana' />
</form>

示例网址:

http://zzz.com?fruit[1]=apple&fruit[2]=banana

示例PHP:

assert($_POST['fruit'] === array(1=>'apple', 2=>'banana'));

我对此有疑问:

  • 背后的机制是什么?这些包含括号的名称在什么时候被转换为数组?这是HTTP协议的一个特性吗?网络服务器? PHP语言?

  • 继续上一个问题,这是一个常用的黑客还是普通的编程工具?

  • 在输入字段名称中使用括号的规则是什么(全部)?

  • 可以用这种方式创建多维数组吗?

3 个答案:

答案 0 :(得分:14)

  

背后的机制是什么?在哪   指出这个仅包含的名称   括号转换为数组?是   这是HTPP协议的一个特点?   网络服务器? PHP语言?&gt;

这是PHP语言的一个特性。实际上,HTTP协议并不禁止使用多个相同的GET / POST参数。根据HTTP规范,以下内容:

foo=bar&foo=baz

不应该导致foo == baz。这是两个具有两个不同值的参数。但是,PHP会用最新的foo覆盖$_POST['foo'] == 'baz',导致[],即使它们可以单独解析。

  

继续上一个问题,是   这是一个常用的黑客或正常   编程工具?

这取决于观点。在PHP世界中,这是完全正常的,因为该语言不支持使用括号foo != foo[]指定同名的多个参数。但是在HTTP世界中,{{1}}。

  

使用规则是什么(全部)   输入字段名称中的括号?

与PHP数组相同,但您不必引用字符串键。

  

可以创建多维数组   这样吗?

是的,你可以。

答案 1 :(得分:5)

据我所知,这是一种PHP内部查看(和解析)元素的机制,它通过表单(GET / POST)与[]后缀一起传递,并将它们解释为元素数组。 HTTP协议并不关心,它只是传递元素的名称及其在查询字符串中的关联值。

这是我记忆中的常规编程工具(我想我甚至记得它更常用于多文件上传,当你有“添加文件”链接,将另一个元素附加到表单时,使用与前一个名称相同([])。)

适用于PHP的相同规则适用于表单。您可以使用[]自动索引元素(对于通用列表)或使用元素ID明确列出它们(例如文件[1],文件[2]等(按照我之前的示例))

是的,可以使用多维数组。

有关更多信息,请查看PHP自己的_POST documentation(尤其是评论)

答案 2 :(得分:3)

  • 这完全是php语言功能。 HTTP对数组一无所知。在http中,foobar[baz]只是变量的名称

  • 这是一种常规做法

  • 在方便的时候使用它们。例如:要对属于一个实体的多个字段进行分组,例如news[title] + news[body]

  • 是。 TIAS