如何在php中添加和操作当前url的现有GET变量?

时间:2017-03-31 09:15:42

标签: php url get

嗨我有这样的网址......

www.example.com/list.php?type=vehicles&stype=Cars
www.example.com/list.php?type=vehicles&stype=Cars&loc=Ludhiana

现在我想根据价格,型号和访问量对所有结果进行排序。我使用

$sort="id";
    if(isset($_GET['sort'])){
        if($_GET['sort']=='P-ASC'){ $sort = "price ASC"; }
        elseif($_GET['sort']=='P-DESC'){ $sort = "price DESC"; }
        elseif($_GET['sort']=='R-ASC'){ $sort = "model ASC"; }
        elseif($_GET['sort']=='R-DESC'){ $sort = "model DESC"; }
        elseif($_GET['sort']=='V-ASC'){ $sort = "visits ASC"; }
        elseif($_GET['sort']=='V-DESC'){ $sort = "visits DESC"; }
    }

现在我想在url的末尾添加sort变量来排序结果。 e.g。

www.example.com/list.php?type=vehicles&stype=Cars&sort='**ANYVALUE**'
www.example.com/list.php?type=vehicles&stype=Cars&loc=Ludhiana&sort='**ANYVALUE**'

对于href我正在使用哪个对我来说绝对合适...

<a href="?<?php echo $_SERVER['QUERY_STRING']; ?>&sort='**Anyvalue**'"

当我尝试操纵排序值时存在问题,例如我有两个href

<a href="?<?php echo $_SERVER['QUERY_STRING']; ?>&sort='P-ASC'"
<a href="?<?php echo $_SERVER['QUERY_STRING']; ?>&sort='P-DESC'"

当我转到第一个网址时,它工作正常,当我在使用第一个网址后转到第二个网址时,URL会在网址中添加另一个排序变量,在URL中输入两个排序变量。我想要的是

  1. 检查是否存在任何这些GET变量?
  2. 如果存在则操纵这些变量的值?
  3. 如果不存在,则将新的get变量添加到URL。

1 个答案:

答案 0 :(得分:0)

http_build_query($_GET + ['sort' => 'anyvalue'])

应该有效

修改

数组的加号执行此操作

$a = ['a' => 1, 'b' => 2, 'c' => 3];
$b = ['a' => 4, 'd' => 5];
$res = $a + $b;

它向来自$a的数组$b添加了$a

中不存在的键

这是$res变量:

array(4) {
  'a' =>
  int(1)
  'b' =>
  int(2)
  'c' =>
  int(3)
  'd' =>
  int(5)
}

http_build_query函数从数组构建查询字符串。 所以http_build_query($res)将是:

a=1&b=2&c=3&d=5

在您的情况下,您可以像这样使用它:

<a href="?<?php echo http_build_query($_GET + ['sort' => '**AnyValue**']); ?>">link</a>