Intereting Posts
Соглашение об именах: единственное число против множественного числа для классов, описывающих объекты в PHP Как обрабатывать CSV с 100k + линиями в PHP? Как сделать текстовое поле с несколькими типами строк в html? Магический метод PHP __call на подклассах есть ли простая php-оболочка для окон? SQLSTATE : Нарушение ограничения целостности: 1452 Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не удалось – Laravel PHP Многоязычный сайт Finfo_file в загруженном файле для определения типа mime Возьмите эскиз из файла quicktime (movie) безопасные сеансы / файлы cookie в php default mailto в письмах по электронной почте в формате PDF Массив дерева подкатегорий категории трассировки PHP в пользовательский 2D-массив PHP OOP: цепочка методов Скрипт для работы с файлами PHP: ненадежные загрузки? как придерживаться принципа Don't-Repeat-Yourself (DRY), когда будет слишком много if-then-else, делая код нечитаемым?

http_build_query с теми же параметрами имени

Есть ли способ создать запрос автоматически с помощью http_build_query с использованием параметров с именем?

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

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

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

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

Функция создает что-то вроде foo[0]=x&foo[1] , чего я не хочу, так как мне нужно что-то foo=x&foo=y .

Related of "http_build_query с теми же параметрами имени"

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

Вот функция, которую я создал для создания запроса и сохранения имен. Я создал это для работы с сторонним API, который требует нескольких параметров строки запроса с тем же именем. Решение Джейсона приятно, но мне просто стало неудобно использовать регулярное выражение для удаления скобок.

Я попытался сделать реализацию такой же, как http_build_query . Единственное различие заключается в том, что он не принимает последний параметр $enc_type . Кодирование выполняется с использованием urlencode() который должен быть PHP_QUERY_RFC1738 , тип кодировки по умолчанию для http_build_query()

 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); }