有没有办法使用http_build_query
使用同名参数自动构建查询?
如果我做的话
array('foo' => 'x', 'foo' => 'y');
它们在数组中明显被覆盖,但即使我这样做:
array('foo' => array('x', 'y'));
该函数创建类似foo[0]=x&foo[1]
的东西,这不是我想要的,因为我需要这种格式foo=x&foo=y
的参数。
答案 0 :(得分:37)
这应该做你想要的,我有一个需要相同的api。
$vars = array('foo' => array('x','y'));
$query = http_build_query($vars, null, '&');
$string = preg_replace('/%5B(?:[0-9]|[1-9][0-9]+)%5D=/', '=', $query); //foo=x&foo=y
答案 1 :(得分:1)
这是我创建的用于构建查询和保留名称的函数。我创建它以使用需要多个具有相同名称的查询字符串参数的第三方API。
function custom_build_query($query_data) {
$query = array();
foreach ($query_data as $name => $value) {
$value = (array) $value;
array_walk_recursive($value, function($value) use (&$query, $name) {
$query[] = urlencode($name) . '=' . urlencode($value);
});
}
return implode("&", $query);
}
用法:
echo custom_build_query(['a' => 1, 'b' => 2, 'c' => [3, 4]]);
输出:
a=1&b=2&c=3&c=4