包含方括号的表单input字段名称,如字段
我见过很多处理表单input的PHP代码,其中input字段名称包含方括号。 我知道这在PHP脚本检查$ _POSTvariables时以某种方式导致PHP数组。
HTML示例:
<form action='http://zzz.com' method='post'> <input name='fruit[1]' value='apple' /> <input name='fruit[2]' value='banana' /> </form>
示例url:
http://zzz.com?fruit[1]=apple&fruit[2]=banana
示例PHP:
assert($_POST['fruit'] === array(1=>'apple', 2=>'banana'));
我的问题是:
-
它背后的机制是什么? 这些包含括号的名字在什么时候被转换成数组? 这是HTTP协议的function吗? Web服务器? PHP语言的?
-
继续前面的问题,这是一个常用的黑客或正常的编程工具?
-
什么是(所有)在input字段名称中使用括号的规则?
-
multidimensional array可以这样创build吗?
什么是背后的机制? 在哪一点,只是包含括号的名称被转换为数组? 这是HTPP协议的function吗? Web服务器? PHP语言的?>
这是PHP语言的一个特性。 实际上,HTTP协议并不禁止使用多个相同的GET / POST参数。 根据HTTP规范,以下内容:
foo=bar&foo=baz
不应该导致foo == baz
。 这是两个不同的值的两个参数。 但是,PHP会用最新的代码覆盖前面的foo
,导致$_POST['foo'] == 'baz'
,即使它们可以单独parsing。
继续前面的问题,这是一个常用的黑客或正常的编程工具?
这取决于观点。 在PHP世界中,这是完全正常的,因为不使用括号[]
,语言不支持同名多个参数的说明。 在HTTP世界中, foo != foo[]
。
什么是(全部)在input字段名称中使用括号的规则?
与PHP数组相同,只是不必引用string键。
multidimensional array可以这样创build吗?
是的你可以。
据我所知,这是PHP内部看到(和parsing)通过forms(GET / POST)和[]
postfix传递的元素并将它们解释为元素数组的一种机制。 HTTP协议并不在意,它只是传递元素的名字和它在查询string中的相关值。
在我记忆中,这是一个普通的编程工具(我想我甚至记得它更常用于多file upload时,当你有“添加文件”的链接,附加另一个元素的forms,使用相同的名称与[]
)。
适用于PHP的相同规则适用于表单。 您可以使用[]
自动索引元素(对于通用列表)或使用元素ID(例如file [1],file [2]等)显式列出它们(按照前面的示例))
是的,可以使用multidimensional array。
有关更多信息,请查看PHP自己的_POST文档 (尤其是注释)
-
这是完全的PHP语言function。 HTTP对数组一无所知。 在http中,
foo
或bar[baz]
只是variables的名称 -
这是一个正常的做法
-
当它适合你的时候使用它们。 例如:将属于一个实体的几个字段分组,例如
news[title]
+news[body]
-
是。 TIAS