PHP добавить / изменить параметр строки запроса и получить URL-адрес

Как перенаправить пользователя обратно на ту же страницу с существующими Query Strings, но у вас есть 1 добавленная / измененная, как «страница».

Я полагаю, 1 метод:

  1. проанализируйте $_SERVER['QUERY_STRING'] в массив
  2. если page существует в массиве, измените значение, иначе добавьте его
  3. используйте http_build_query чтобы получить строку запроса для добавления к $_SERVER['PHP_SELF']

но есть ли лучший / более прямой способ?

Чтобы убедиться, что вы знаете об этом, используйте parse_str для анализа строки запроса:

 <?php parse_str($_SERVER['QUERY_STRING'], $query_string); $query_string['page'] = basename($_SERVER['PHP_SELF']); $rdr_str = http_build_query($query_string); 

Используя ответ Джима Рубинштейна, я придумал полезную функцию, которую, как я думал, мог бы поделиться:

  function modQuery($add_to, $rem_from = array(), $clear_all = false){ if ($clear_all){ $query_string = array(); }else{ parse_str($_SERVER['QUERY_STRING'], $query_string); } if (!is_array($add_to)){ $add_to = array(); } $query_string = array_merge($query_string, $add_to); if (!is_array($rem_from)){ $rem_from = array($rem_from); } foreach($rem_from as $key){ unset($query_string[$key]); } return http_build_query($query_string); } с  function modQuery($add_to, $rem_from = array(), $clear_all = false){ if ($clear_all){ $query_string = array(); }else{ parse_str($_SERVER['QUERY_STRING'], $query_string); } if (!is_array($add_to)){ $add_to = array(); } $query_string = array_merge($query_string, $add_to); if (!is_array($rem_from)){ $rem_from = array($rem_from); } foreach($rem_from as $key){ unset($query_string[$key]); } return http_build_query($query_string); } 

Например: <a href="?<?=modQuery(array('kind'=>'feature'))?>">Feature</a>