对于任何想要保留当前参数的解决方案,如果给定新值则更新并附加新参数的解决方案,这可以完成工作:
代码
$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
数组中的所有参数都是新的(显然)或正在更改的参数。它是通用的!