gpt4 book ai didi

具有两个相同数组键的 PHP http_build_query

转载 作者:可可西里 更新时间:2023-11-01 13:54:52 24 4
gpt4 key购买 nike

我想使用 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?

最佳答案

这里的问题当然是 PHP 数组(散列)中的每个键只能有一个值。从本质上讲,PHP 散列并不是查询字符串的良好表示,因为查询字符串具有顺序并且对键的唯一性没有限制。

为了解决这个问题,您需要一个可以处理重复键的特殊查询字符串构建器:

class QueryString {
private $parts = array();

public function add($key, $value) {
$this->parts[] = array(
'key' => $key,
'value' => $value
);
}

public function build($separator = '&', $equals = '=') {
$queryString = array();

foreach($this->parts as $part) {
$queryString[] = urlencode($part['key']) . $equals . urlencode($part['value']);
}

return implode($separator, $queryString);
}

public function __toString() {
return $this->build();
}
}

用法示例(Codepad Demo):

$qs = new QueryString();
$qs->add('filter', '1');
$qs->add('filter', '2');
var_dump($qs->build()); // filter=1&filter=2

关于具有两个相同数组键的 PHP http_build_query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17161114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com