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

joh*_*ack 3 php url get query-string

我的页面上有一个文章列表,我希望能够通过将$ _GET值附加到URL来应用无数种类和过滤器:

http://www.example.com/blogs.php?sort=newest&popularity=high&length=200

如果我在我的页面上有链接将这些值附加到网址...他们需要足够聪明,以便考虑应用的任何先前的排序/过滤器.

例1:

如果我现在有... http://www.example.com/blogs.php?sort=newest

然后我想附加一个人气=高的额外过滤器,我需要这个:

http://www.example.com/blogs.php?sort=newest&popularity=high

而不是这个:

http://www.example.com/blogs.php?popularity=high

例2:

如果我有... http://www.example.com/blogs.php?popularity=high

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

http://www.example.com/blogs.php?popularity=high&popularity=low

所以简单地添加到查询字符串将不会飞.

因此,构建我的过滤器链接以便他们"记住"旧过滤器的可扩展方法是什么,但是在需要时仍会覆盖自己的过滤器值?

Nic*_*las 9

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

$myFilters = array(
                      "popularity" => "low",
                      "sort" => "newest"
);
Run Code Online (Sandbox Code Playgroud)

将过滤器存储在关联数组中可确保每个过滤器只有1个值.然后你可以使用http_build_query来构建你的查询字符串:

$myURL = 'http://www.example.com/test.php?' . http_build_query($myFilters);
Run Code Online (Sandbox Code Playgroud)

这将产生以下URL:

http://www.example.com/test.php?popularity=low&sort=newest
Run Code Online (Sandbox Code Playgroud)

编辑:哦,如果查询字符串中的过滤器顺序很重要,您可以在构建URL之前对关联数组进行排序:

asort($myFilters);
$myURL = 'http://www.example.com/test.php?' . http_build_query($myFilters);
Run Code Online (Sandbox Code Playgroud)