Edh*_*hen 1 php url query-string
我有一个小问题,操纵当前的URL查询字符串,以在最后添加一个额外的参数.
例如,假设有一个产品的类别布局,URL将是:
index.php?category=3&type=5
Run Code Online (Sandbox Code Playgroud)
现在,在该页面上,我有一个表格或网格布局的链接.在我目前拥有的那些网址中:
<a href="index.php?<?php echo preg_replace($array,'',$_SERVER['QUERY_STRING']); ?>&layout=grid" ...
Run Code Online (Sandbox Code Playgroud)
然后,我也为表做同样的事情href.我的数组中也有:
$array = array ( '/&layout=table/', '/&layout=grid/' )
Run Code Online (Sandbox Code Playgroud)
这是正确的方法,还是有更好的方法来做到这一点?我问,因为没有preg_replace,它会在layout每次点击时继续添加相同的参数,所以它也会显示上一个参数,然后是下一个参数,然后是下一个..而不删除前面的layout参数.
任何有关这方面的见解将非常感激.
编辑:感谢下面的答案,我创建了一个小功能:
function buildQuery($key,$value) {
$params = $_GET;
$params[$key] = $value;
return http_build_query($params);
}
Run Code Online (Sandbox Code Playgroud)
那么它唯一的问题是:
<a href="index.php?<?php echo buildQuery('layout','grid'); ?>">grid</a>
Run Code Online (Sandbox Code Playgroud)
这可能看起来毫无意义,但我希望我的视图/模板文件没有额外的设置变量.我是一个干净的怪物.我甚至可能会返回'index.php?' 有它,所以我可以更懒,反正现在玩的东西:) ..
如果要修改查询字符串,则只需修改GET变量并重建查询字符串就更容易:
$params = $_GET;
$params['layout'] = 'new_layout';
Run Code Online (Sandbox Code Playgroud)
然后:
<a href="index.php?<?php echo http_build_query($params); ?>">...</a>
Run Code Online (Sandbox Code Playgroud)
虽然你也可以这样做:
<a href="index.php?<?php echo preg_replace('/(^|&)layout=[^&]*/', '\\1layout=new_layout', $_SERVER['QUERY_STRING']; ?>">...</a>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4574 次 |
| 最近记录: |