PHP http_build_query()为数组get参数生成不正确的url

PHP http_build_query()为数组get参数生成不正确的url,php,arrays,url,get,Php,Arrays,Url,Get,我可能发现了PHP函数http\u build\u query()的一个bug 我正在开发一个具有动态形式的搜索引擎,其中一些参数是数组 我只是使用http\u build\u query()从当前的$\u get获取查询url。 但在生成的新查询中,所有这些数组参数都会自动从“arrayName%5B%5D”更改为“arrayName%5B0%5D” $queryStr = http_build_query($_GET); 原始url &阵列名称%5B%5D= 从http\u build\u

我可能发现了PHP函数http\u build\u query()的一个bug

我正在开发一个具有动态形式的搜索引擎,其中一些参数是数组

我只是使用http\u build\u query()从当前的$\u get获取查询url。 但在生成的新查询中,所有这些数组参数都会自动从“arrayName%5B%5D”更改为“arrayName%5B0%5D”

$queryStr = http_build_query($_GET);
原始url

&阵列名称%5B%5D=

从http\u build\u query()获取的新查询字符串:

&阵列名称%5B0%5D=


这是什么原因?如何修复此问题?

http\u build\u query()函数不是一个bug

通过URL传递get参数时,如:“arrayName[]=”

会回来的

Array
(
    [arrayName] => Array
        (
            [0] => 
        )

)
并从数组中生成url编码字符串,结果为:

&arrayName%5B0%5D=
解码后的结果如下:

arrayName[0]=
现在您可以看到0来自何处:)


无需修复此问题,您可以更改代码以传递arrayName的键,或者仍按原样使用它

请提供一个复制案例(例如,您看到问题所在的$\u GET的值)。似乎不太可能是个bug。如果我读对了,这是完全合理的。你的子数组不能有一个没有索引的值,所以它按照我的预期将索引放入。在应用函数之前,我从未操作过$\u GET的内容。那么为什么会自动添加索引0呢?抱歉,您的评论没有任何意义。请尝试
var\u dump($\u GET)
并查看它提供了什么。您将看到,已经为
arrayName
项自动生成了索引。当您使用
http\u build\u query
时,索引也会被放入,因为这是唯一有意义的事情。我不知道怎么解释这个。。。
arrayName[0]=