$ _GET超全局变量中键 - 值对的顺序是否保证与请求的URL中接收的字段 - 值对的顺序一致?
例如,给定Web服务器收到此URL请求:
index.php?a=1&foo=bar&b=2
...而且这段代码:
foreach ($_GET as $key => $value)
{
echo $key . ": " . $value\n";
}
...结果总是保证:
a: 1
foo: bar
b: 2
我没有在$ _GET或超级全局的PHP文档中看到任何关键排序的提及。这使我相信不能依赖键值对的顺序。
有人知道订单是否有保证的一致性,或者更好地指向说明这个的spec / doc?
答案 0 :(得分:3)
最好假设它们不可靠有两个原因。首先,这没有记录。没有记录的事情如有更改,恕不另行通知......因为如果他们第一次没有通知您,为什么现在需要?其次,你不能100%肯定客户端不会以某种方式隐藏数据。
答案 1 :(得分:1)
是的,它会的。您可以在main / php_variables.c上查看源代码,函数“SAPI_TREAT_DATA_FUNC”。有一个简单的循环,按顺序从查询字符串中读取变量,然后将它们添加到superglobals数组(按顺序,使用php_register_variable_ex()),如果它们通过过滤器。
答案 2 :(得分:0)
在PHP中,数组是有序映射,而不是简单的散列。这意味着,订单是有保证的,是的。
编辑:错别字