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
所以简单地添加到查询字符串将不会飞.
因此,构建我的过滤器链接以便他们"记住"旧过滤器的可扩展方法是什么,但是在需要时仍会覆盖自己的过滤器值?
您可以将过滤器存储在关联数组中:
$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)