如何实现具有相同名称参数的http_build_query?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (165)

是否有一种方法可以自动生成查询?http_build_query使用具有名称的参数?

如果我做了这样的事

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

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

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

该函数创建了类似于foo[0]=x&foo[1],这不是我想要的,因为我想:foo=x&foo=y.

提问于
用户回答回答于
$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
用户回答回答于
function http_build_query_same_names($query_data, $numeric_prefix = null, $arg_separator = null) {
    if (!is_object($query_data) && !is_array($query_data)) {
        trigger_error( __FUNCTION__ . "(): Parameter 1 expected to be Array or Object. Incorrect value given", E_USER_WARNING);
        return false;
    }
    $query_data = is_object($query_data) ? get_object_vars($query_data) : $query_data;
    $numeric_prefix = isset($numeric_prefix) ? $numeric_prefix : '';
    $arg_separator = isset($arg_separator) ? $arg_separator : ini_get('arg_separator.output');

    $final = array();

    foreach ($query_data as $name => $value) {
        $name = is_numeric($name) ? $numeric_prefix . $name : $name;
        if (is_array($value)) {
            array_walk_recursive($value, function($value, $key, $name) use (&$final) {
                $final[] = urlencode($name) . '=' . urlencode($value);
            }, $name);
        }
        else {
            $final[] = urlencode($name) . '=' . urlencode($value);
        }
    }

    return implode($arg_separator, $final);
}

所属标签

可能回答问题的人

  • 西风

    renzha.net · 站长 (已认证)

    7 粉丝1 提问9 回答
  • 四无君

    0 粉丝0 提问3 回答
  • o o

    3 粉丝490 提问2 回答
  • Dingda

    Dingda · 站长 (已认证)

    4 粉丝0 提问2 回答

扫码关注云+社区

领取腾讯云代金券