Php 在superglobal$\u GET中是否保证键值对的顺序?

Php 在superglobal$\u GET中是否保证键值对的顺序?,php,get,superglobals,Php,Get,Superglobals,$\u GET superglobal变量中键-值对的顺序是否保证与请求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 我在PHP文档$u GET或superglobals

$\u GET superglobal变量中键-值对的顺序是否保证与请求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
我在PHP文档$u GET或superglobals中没有看到任何关于键排序的内容。这使我相信键-值对的顺序是不可靠的


有人知道顺序是否有保证的一致性,或者最好指向spec/doc来澄清这一点吗?

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


编辑:打字错误最好假定它们不可靠,原因有二。首先,这没有记录在案。未记录的内容如有更改,恕不另行通知。。。因为如果他们没有第一次通知你,为什么现在就需要通知你?其次,你不能100%肯定客户不会以某种方式获取数据。

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

我看不出它会是什么,除非您实际上没有传递所需的查询字符串。也就是说,你会依赖订单而不是直接通过名字访问它们吗?