【问题标题】:http_build_query with same name parameters具有相同名称参数的 http_build_query
【发布时间】:2011-11-17 16:03:14
【问题描述】:

有没有办法通过http_build_query 使用同名参数自动构建查询?

如果我做类似的事情

array('foo' => 'x', 'foo' => 'y');

它们显然在数组中被覆盖了,但即使我这样做了:

array('foo' => array('x', 'y'));

该函数创建类似foo[0]=x&foo[1] 的东西,这不是我想要的,因为我需要foo=x&foo=y 这种格式的参数。

【问题讨论】:

    标签: php http url


    【解决方案1】:

    这应该可以满足您的要求,我有一个需要相同功能的 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
    

    【讨论】:

    • 谢谢! mailgun API 需要这个来批量发送消息。
    • 谢谢杰森。这在 Google Adsens API 上非常有用
    • 模式可以更改为/%5B(?:\d|[1-9]\d+)%5D=/以使用预定义字符
    • 能否请您详细说明该正则表达式模式替换了什么?
    【解决方案2】:

    这是我创建的用于构建查询和保留名称的函数。我创建它是为了与需要多个具有相同名称的查询字符串参数的第三方 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多