在PHP中传递不断变化的查询字符串

在PHP中传递不断变化的查询字符串,php,url,get,query-string,Php,Url,Get,Query String,我在我的页面上有一个文章列表,我希望能够通过在URL中添加$\u GET值来应用各种排序和过滤器: 如果我的页面上有链接,可以将这些值附加到url…它们需要足够智能,以考虑之前应用的任何排序/过滤器 例1: 如果我现在有。。。 然后我想附加一个受欢迎度=高的附加过滤器,我需要有: 而不是这个: 例2: 如果我有。。。 我试图改变我的人气过滤器,我不想: 因此,简单地附加到查询字符串上是不可能的 因此,构建“我的过滤器”链接的可伸缩方式是什么,这样它们可以“记住”旧过滤器,但在需要时仍

我在我的页面上有一个文章列表,我希望能够通过在URL中添加$\u GET值来应用各种排序和过滤器:

如果我的页面上有链接,可以将这些值附加到url…它们需要足够智能,以考虑之前应用的任何排序/过滤器

例1:

如果我现在有。。。

然后我想附加一个受欢迎度=高的附加过滤器,我需要有:

而不是这个:

例2:

如果我有。。。

我试图改变我的人气过滤器,我不想:

因此,简单地附加到查询字符串上是不可能的


因此,构建“我的过滤器”链接的可伸缩方式是什么,这样它们可以“记住”旧过滤器,但在需要时仍会覆盖自己的过滤器值?

最好的方式是手动编译查询字符串。例如:

$str = '?';
$str .= (array_key_exists('popularity', $_GET)) ? 'popularity='.$_GET['popularity'].'&' : '';
$str .= (array_key_exists('sort', $_GET)) ? 'sort='.$_GET['sort'].'&' : '';
// Your query string that you can tack on is now in the "str" variable.

您可以将过滤器存储在关联数组中:

$myFilters = array(
                      "popularity" => "low",
                      "sort" => "newest"
);
将过滤器存储在关联数组中可确保每个过滤器只有1个值。然后,您可以使用来构建查询字符串:

$myURL = 'http://www.example.com/test.php?' . http_build_query($myFilters);
这将产生以下URL:

http://www.example.com/test.php?popularity=low&sort=newest
编辑:哦,如果查询字符串中的过滤器顺序很重要,您可以在构建URL之前对关联数组进行排序:

asort($myFilters);
$myURL = 'http://www.example.com/test.php?' . http_build_query($myFilters);
使用或将当前GET变量与新变量合并:

$_GET = array('sort'=>'newest');

$params = array_merge($_GET, array('popularity'=>'high'));
// OR
$params = array('popularity'=>'high') + $_GET;

之后,您可以使用或使用自己的查询生成算法。

似乎您应该使用如下签名创建自己的函数:

函数writeLink($baseURL、$currentFilters、$additionalFilters)


此函数可以确定附加筛选器是否应覆盖或删除$currentFilters中的条目,然后它可以使用http\u build\u query一次输出整个URL

如何处理要更改其中一个筛选器的链接?链接本身不能更改数组值,然后重新加载页面…对吗?只需使用要放入链接的筛选器构建一个特定数组。