在PHP中传递不断变化的查询字符串
我在我的页面上有一个文章列表,我希望能够通过在URL中添加$\u GET值来应用各种排序和过滤器: 如果我的页面上有链接,可以将这些值附加到url…它们需要足够智能,以考虑之前应用的任何排序/过滤器 例1: 如果我现在有。。。 然后我想附加一个受欢迎度=高的附加过滤器,我需要有: 而不是这个: 例2: 如果我有。。。 我试图改变我的人气过滤器,我不想: 因此,简单地附加到查询字符串上是不可能的在PHP中传递不断变化的查询字符串,php,url,get,query-string,Php,Url,Get,Query String,我在我的页面上有一个文章列表,我希望能够通过在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如何处理要更改其中一个筛选器的链接?链接本身不能更改数组值,然后重新加载页面…对吗?只需使用要放入链接的筛选器构建一个特定数组。