Для тех, кто хочет решение, которое сохраняет текущие параметры, обновляет, если им присваивается новое значение, и добавляет новые параметры, это делает работу:
Код
$domainurl='https://' . $_SERVER['SERVER_NAME'];
$currenturl=$domainurl . $_SERVER['PHP_SELF'];
function urlVars($new=array()) {
$url=$GLOBALS['currenturl'];
$vars=array_merge($_GET, $new);
foreach ($vars as $key => $var) {
$params[$x]='&' . $key . '=' . $var;
$x++;
} $str='?' . trim(implode($params), '&');
return $url .= $str;
}
Пример использования:
<a href="' . urlVars(array('page'=>'2', 'view'=>'30', etc.)) . '">Go To Page 2 & Show 30 Results</a>
Использование переменной $currenturl, которая возвращает только домен и путь к текущей странице, а не $_SERVER['REQUEST_URI'], которая также возвращает строку запроса, также решает проблему повторяющихся запросов и позволяет изменять ранее установленные параметры.
Это связано с тем, что array_merge() будет соединять два или более массива вместе, и если есть несколько ключей с одинаковым именем, последний объявленный получает торт, а все остальные игнорируются. А так как массив $_GET заполнен старыми параметрами, он должен стоять перед массивом $new. Пример:
$_GET['page']='1';
if ($new['page']='1') {array_merge($_GET, $new);} // 'page'=>'1'
elseif ($new['page']='4') {array_merge($_GET, $new);} // 'page'=>'4'
$_GET['page']='4';
if ($new['page']='2') {array_merge($_GET, $new);} // 'page'=>'2'
Примечание
Изящная особенность этой функции и единственная причина, по которой я возился с ней часами, пока она не стала идеальной, заключается в том, что вам не нужно указывать одни и те же параметры каждый раз, когда у вас есть новая ссылка/форма или отключается какой-либо массив в другой. скрипт, который содержит возможные ключи параметров. Все, что вы помещаете в массив $new, это параметры, которые являются новыми (очевидно) или изменяются. Это универсально!
person
tst_ehbw
schedule
03.04.2017