Допустим, я получаю запросы, такие как:
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)); } } }