http_build_query с такими же параметрами имени - PullRequest
21 голосов
/ 17 ноября 2011

Есть ли способ автоматически построить запрос с помощью http_build_query, используя параметры с тем же именем?

Если я сделаю что-то вроде

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

Они явно перезаписываются в массиве, но даже если я это сделаю:

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

Функция создает что-то вроде foo[0]=x&foo[1], а это не то, что мне нужно, поскольку мне нужны параметры в этом формате foo=x&foo=y.

Ответы [ 2 ]

37 голосов
/ 17 ноября 2011

Это должно делать то, что вы хотите, у меня был 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 голос
/ 25 апреля 2017

Вот функция, которую я создал, чтобы построить запрос и сохранить имена.Я создал это для работы со сторонним 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...