我想使用http_build_query构造这个URL:
https://www.googleapis.com/freebase/v1/topic/m/0d6lp?filter=/common/topic/notable_for&filter=/common/topic/alias
字符串
请注意,“filter=”参数在url中出现两次,以指定两个过滤器。
我试着这样做,但有一个问题:
$service_url = 'https://www.googleapis.com/freebase/v1/topic';
$mid = '/m/0d6lp';
$params = array('filter' => '/common/topic/notable_for', 'filter' => '/common/topic/alias');
$url = $service_url . $mid . '?' . http_build_query($params);
型
问题是因为“filter”数组键重复了两次,只有最后一个参数出现在http_build_query中。我如何用两个过滤器构造原始url?
5条答案
按热度按时间whhtz7ly1#
这不是最好的解决方案,但我有一个解决方案:
字符串
输出量:
**错误:**可能这不会工作,因为url将是:
=
型
产出:
key1=value1&key1=value2&key2=value3&key2=value4
eagi6jfj2#
这里的问题当然是PHP数组(哈希)中的每个键只能有一个值。本质上,PHP哈希不是查询字符串的良好表示,因为查询字符串有顺序,并且没有关于键的唯一性的约束。
为了解决这个问题,你需要一个特殊的查询字符串构建器来处理重复的键:
字符串
示例用法(Codepad Demo):
型
lnlaulya3#
我已经扩展了@Bailey帕克的回答,以处理第一条评论中提出的问题。
字符串
此代码还可以接受特定键的值数组
型
这个类将生成普通的查询字符串,键有多个值,加上[]符号,输出如下所示
型
flmtquvp4#
PHP关联数组将在以后的赋值中覆盖键。
因此,你应该调整你的数组,
字符串
到
型
http_build_query_duplicate_key
定义如下:型
即使有嵌套数组,这段代码也可以工作,因为它将递归调用该方法,直到所有嵌套数组都被解决。
希望这有帮助
bq9c1y665#
1.不能在accoc数组中用一个索引存储两个或多个值。
filter[]
这样的值因此,我建议您创建自己的函数来构建该查询。