Как перенаправить пользователя обратно на ту же страницу с существующими Query Strings, но у вас есть 1 добавленная / измененная, как «страница».
Я полагаю, 1 метод:
$_SERVER['QUERY_STRING']
в массив page
существует в массиве, измените значение, иначе добавьте его 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>