Intereting Posts
Увеличьте размер загрузки на Nginx Метод Laravel Sync отправляет только 2-е данные Когда я использую статические переменные / функции в php? максимальная длина сеанса php и файлов cookie php_osx установлен php 7, phpinfo () и композитор по-прежнему считают его php5.5 Календар Google 403 Запрещенный обмен PHP-сервером на сервер jQuery UI Tooltip с динамическим контентом Сохранять значения форм после отправки PHP с помощью файлов cookie. Отфильтровать заказы с помощью WP_Query из массива идентификаторов заказов в WooCommerce Как запустить скрипт PHP с помощью задачи расписания Windows? Доктрина2 «Много-много / много-к-одному» В PHP можно проверить содержимое Zip-файла без предварительного извлечения его содержимого? Как реализовать сочетания клавиш на веб-сайтах Выполнение скрипта bash через PhP дает другой результат по сравнению с выполнением вручную Использовать кнопки для отправки в php-скрипт

Несколько параметров HTTP GET с тем же идентификатором

Допустим, я получаю запросы, такие как:

http://www.example.com/index.php?id=123&version=3&id=234&version=4

Можно ли их легко извлечь внутри моего php-кода? Я понимаю, что могу получить всю цепочку с javascript, используя window.location.href и обрабатывать ее вручную, но я ищу что-то более элегантное. Запросы могут содержать любое количество пар версии / идентификатора, но я могу предположить, что запрос хорошо сформирован и не обязан обрабатывать недействительные строки.

Согласно этому комментарию из руководства PHP, синтаксический анализатор строки запроса PHP упустит повторяющиеся параметры … поэтому я не думаю, что PHP подходит для того, что вы хотите сделать (за исключением того, что он имеет такую ​​же емкость, как и javascript для получить необработанную строку запроса, с помощью которой вы можете делать все, что хотите)

Если вы можете изменить имя поля, чтобы включить [] , тогда PHP создаст массив, содержащий все соответствующие значения:

 http://www.example.com/index.php?id[]=123&version[]=3&id[]=234&version[]=4 

Если у вас нет возможности изменять имена полей, то, как вы говорите, вам придется самостоятельно разбирать запрос.

Предполагая, что у вас есть некоторый контроль над запросом, суффикс имени с [] и PHP будет генерировать массивы, а не бросать все, кроме одного.

 http://www.example.com/index.php?id[]=123&version[]=3&id[]=234&version[]=4 

Поскольку они являются парами, вы, вероятно, захотите исправить порядок, в котором они появляются, используя индексы.

 http://www.example.com/index.php?id[0]=123&version[0]=3&id[1]=234&version[1]=4 

Просто извлеките ключи и значения $ _GET, используйте функцию как:

 print_array('$_GET...',$_GET); 

… и код функции будет:

 function print_array($title, $arr) { echo '<table width="100%" style="padding:10;">'; echo '<tr><td width="30%" style="text-align:right; background-color:bisque;">key of </td><td style="background-color:bisque;">'.$title.'</td></tr>'; foreach($arr as $key => $value) { echo '<tr>'; echo '<td style="text-align:right; color:grey;">'; echo $key; echo '</td>'; echo '<td>'; echo $value; echo '</td>'; echo '</tr>'; } echo '</table>'; } 

Не так округлены или надежны, как упомянутые выше методы, но я использую это, чтобы удалить необходимость [] в URL-адресах, не беспокоясь о переписывании.

 $aQuery = explode("&", $_SERVER['QUERY_STRING']); $aQueryOutput = array(); foreach ($aQuery as $param) { if(!empty($param)){ $aTemp = explode('=', $param, 2); if(isset($aTemp[1]) && $aTemp[1] !== ""){ list($name, $value) = explode('=', $param, 2); $aQueryOutput[ strtolower(urldecode($name)) ][] = urldecode(preg_replace('/[^az 0-9\'+-]/i', "", $value)); } } }