超全球$ _GET中是否保证键值对的顺序?

时间:2011-07-22 06:22:32

标签: php get superglobals

$ _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?

3 个答案:

答案 0 :(得分:3)

最好假设它们不可靠有两个原因。首先,这没有记录。没有记录的事情如有更改,恕不另行通知......因为如果他们第一次没有通知您,为什么现在需要?其次,你不能100%肯定客户端不会以某种方式隐藏数据。

答案 1 :(得分:1)

是的,它会的。您可以在main / php_variables.c上查看源代码,函数“SAPI_TREAT_DATA_FUNC”。有一个简单的循环,按顺序从查询字符串中读取变量,然后将它们添加到superglobals数组(按顺序,使用php_register_variable_ex()),如果它们通过过滤器。

答案 2 :(得分:0)

在PHP中,数组是有序映射,而不是简单的散列。这意味着,订单是有保证的,是的。

编辑:错别字