我有一个查询字符串。例如:
?filters=1,2,3,4
它变成了一个数组:
$filters = explode(',', $_GET['filters']);
您可以在
上推送新值$filters = array_push($filters, $new->filter);
然后将其转换为查询字符串
http_build_query($filters);
或者,删除一个值
$filters = array_diff($filters, [$new->filter]);
然后将其转换为查询字符串
http_build_query($filters);
我正在寻找一个优雅的解决方案来移除已存在的项目,或者如果该项目不存在则添加该项目。也欢迎替代解决方案。
谢谢。
答案 0 :(得分:3)
希望我能正确理解你“我正在寻找一个优雅的解决方案,如果它已经存在则删除该项目,或者如果该项目不存在则添加该项目。”。此外,不确定它是否优雅,但可能引发其他想法:
$filters = in_array($new->filter, $filters) ?
array_diff($filters, [$new->filter]) :
array_merge($filters, [$new->filter]);
答案 1 :(得分:2)
除非你想使用PHP的数组符号“hack”,否则它会变得优雅,例如。
?filters[]=1&filters[]=2&filters[]=3&etc...
^^---
这样可以保存explode()
阶段,并且您可以直接将$_GET['filters']
视为数组,但代价是更丑/更长的网址。
答案 2 :(得分:0)
也许你应该编写2个函数,“删除”和“添加”,这将每个循环遍历数组寻找有问题的值。然后remove函数可以删除它,add函数可以添加它。函数本身不会那么优雅,但在代码的其他地方使用它们会很简单。