3

$_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 或 superglobals 的 PHP 文档中看到任何关于键顺序的提及。这使我相信不能依赖键值对的顺序。

有谁知道订单是否有保证的一致性,或者更好地指出规范/文档来澄清这一点?

4

3 回答 3

3

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

于 2011-07-22T06:33:10.033 回答
1

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

于 2011-07-22T08:43:49.947 回答
0

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

编辑:错别字

于 2011-07-22T06:30:06.343 回答