You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Saloon(PHP)添加同名不同值的多个查询参数?

在Saloon中生成重复同名查询参数(不带[])

当你需要生成形如/?param1=val1&param2=val2&param3=val3&param3=val4的URL时,Saloon默认的数组参数处理会生成带[]的格式,你可以通过以下几种方式实现需求:

方法一:逐个添加同名参数

使用query()->add()方法代替数组set(),因为add()允许重复添加同一个键名的参数,不会将数组转换为带[]的格式:

$this->query()->add('param1', 'val1');
$this->query()->add('param2', 'val2');
$this->query()->add('param3', 'val3');
$this->query()->add('param3', 'val4');

这种方式直接直观,适合参数数量不多的场景。

方法二:自定义查询字符串生成逻辑

如果需要批量处理数组参数,可以在你的Request类中重写getQueryString()方法,自定义数组参数的展开规则:

protected function getQueryString(): string
{
    $queryItems = [];
    
    foreach ($this->query()->all() as $key => $value) {
        // 处理数组类型的参数,展开为多个同名键值对
        if (is_array($value)) {
            foreach ($value as $item) {
                $queryItems[] = urlencode($key) . '=' . urlencode($item);
            }
        } else {
            $queryItems[] = urlencode($key) . '=' . urlencode($value);
        }
    }
    
    return implode('&', $queryItems);
}

之后你依然可以用原来的数组方式设置参数:

$this->query()->set([
    'param1' => 'val1',
    'param2' => 'val2',
    'param3' => ['val3', 'val4']
]);

重写后的方法会自动将数组参数展开为不带[]的重复同名参数。

方法三:预处理参数为键值对集合

如果你的参数是动态生成的,可以先将数组参数转换为包含重复键的键值对集合,再批量添加:

// 构造包含重复键的参数集合
$rawParams = [
    'param1' => 'val1',
    'param2' => 'val2',
    'param3' => ['val3', 'val4'],
];

// 转换为扁平的键值对数组
$flatParams = [];
foreach ($rawParams as $key => $value) {
    if (is_array($value)) {
        foreach ($value as $item) {
            $flatParams[] = [$key, $item];
        }
    } else {
        $flatParams[] = [$key, $value];
    }
}

// 批量添加到查询参数
foreach ($flatParams as [$key, $val]) {
    $this->query()->add($key, $val);
}

这种方式适合参数结构复杂、需要动态处理的场景。

内容的提问来源于stack exchange,提问作者Dr. Gianluigi Zane Zanettini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 07:52:45