Удалить значение из строки запроса. Часть 2

Расширяясь по моему первоначальному вопросу здесь: теперь я хотел бы удалить более 1 переменной из строки запроса.

Например, я хочу удалить переменные bar1 & bar2 из строки запроса. Я пробовал следующий код:

 echo parseQueryString("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],"bar2","bar1"); 

Но это не удаляет обе переменные, только bar2 .

Любая помощь оценивается.

Спасибо,

Matt

Вам будет нужно что-то вроде

 echo parseQueryString(parseQueryString("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],"bar2"),"bar1"); 

В качестве альтернативы, поскольку я предполагаю, что parseQueryString – это функция, которую вы определили, вы можете изменить ее, чтобы она принимала аргумент массива и циклы над массивом.

я хотел бы использовать

  • parse_str($_SERVER["QUERY_STRING"], $array); разделить строку запроса

  • unset($array["bar1"]); с unset($array["bar1"]); удалить ненужные переменные

  • http_build_query($array); склеить строку запроса обратно

Я создал новую функцию, которая работает с несколькими параметрами.

 <?php function parseQueryString($url,$remove_arr) { $infos=parse_url($url); $str=$infos["query"]; $op = array(); $pairs = explode("&", $str); foreach ($pairs as $pair) { list($k, $v) = array_map("urldecode", explode("=", $pair)); $op[$k] = $v; } foreach($remove_arr as $remove){ if(isset($op[$remove])){ unset($op[$remove]); } } return str_replace($str,http_build_query($op),$url); } echo parseQueryString("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],array("bar2","bar1")); ?> о <?php function parseQueryString($url,$remove_arr) { $infos=parse_url($url); $str=$infos["query"]; $op = array(); $pairs = explode("&", $str); foreach ($pairs as $pair) { list($k, $v) = array_map("urldecode", explode("=", $pair)); $op[$k] = $v; } foreach($remove_arr as $remove){ if(isset($op[$remove])){ unset($op[$remove]); } } return str_replace($str,http_build_query($op),$url); } echo parseQueryString("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],array("bar2","bar1")); ?> о <?php function parseQueryString($url,$remove_arr) { $infos=parse_url($url); $str=$infos["query"]; $op = array(); $pairs = explode("&", $str); foreach ($pairs as $pair) { list($k, $v) = array_map("urldecode", explode("=", $pair)); $op[$k] = $v; } foreach($remove_arr as $remove){ if(isset($op[$remove])){ unset($op[$remove]); } } return str_replace($str,http_build_query($op),$url); } echo parseQueryString("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],array("bar2","bar1")); ?> с <?php function parseQueryString($url,$remove_arr) { $infos=parse_url($url); $str=$infos["query"]; $op = array(); $pairs = explode("&", $str); foreach ($pairs as $pair) { list($k, $v) = array_map("urldecode", explode("=", $pair)); $op[$k] = $v; } foreach($remove_arr as $remove){ if(isset($op[$remove])){ unset($op[$remove]); } } return str_replace($str,http_build_query($op),$url); } echo parseQueryString("http://" . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],array("bar2","bar1")); ?> 

Я не думаю, что функция parseQueryString будет работать для строк запроса с элементами массива, такими как &bar[]=5&bar[]=12 и т. Д. Я думаю, что все, кроме одного, будут удалены из результата.