【问题标题】:Building query string links构建查询字符串链接
【发布时间】:2010-10-19 13:48:27
【问题描述】:

我正在为我的搜索页面构建一个过滤器部分,我想知道执行查询字符串的最佳方法是什么。我的问题是这些链接的功能很像复选框,所以可以打开一些、全部或没有。我必须遍历大约 30 个左右的链接中的每一个,根据其状态删除或添加该特定链接的值。

我首先关心的是:

我应该像

这样传递数组吗
colors=red,blue,green //爆炸?

colors[]=red&colors[]=blue&colors[]=green //parse_str?

当我遍历每个链接时,删除某个数组的某个值的最快/最佳方法是什么?我想使用我上面发布的第二种方法会更复杂一些,是吗?



EDIT2 - 您对此有何看法?

我在网上遇到了一个教程并想出了这个:

功能删除($filters = 数组(),$remove_key = NULL,$remove_val = NULL) { if( $remove_key != NULL && array_key_exists($remove_key,$filters) ) { if( $remove_val != NULL && array_key_exists($remove_val,array_flip($filters[$remove_key])) ) { $filters[$remove_key] = array_diff($filters[$remove_key],array($remove_val)); } 别的 { 未设置($filters[$remove_key]); } } 返回 http_build_query( $filters ); }

目前,我可以通过 $remove_key 来删除一个键,并通过 $remove_val 来从数组中的一个键中删除一个值。

你们怎么看?对于做 30-50 个链接来说,这会不会太慢?谢谢!

【问题讨论】:

  • 请注意,在第二个示例中,您不必致电 parse_str; PHP 将为您填充一个数组 $_GET['colors']

标签: php arrays get query-string filtering


【解决方案1】:
 colors[]=red&colors[]=blue&colors[]=green 

将是表单提交数据的方式(当 method="get" 时)。您可以通过本机的 $_GET['colors'] 访问它,这可能是最快的方式。

编辑:要通过http_build_query 获取该字符串,只需将它们填充到数组颜色中

$data = array('colors' => array('green','red','blue'));
echo http_build_query($data); // colors[0]=green&colors[1]=red&colors[2]=blue

【讨论】:

  • +1:更不用说它不需要 JavaScript 来组装。而且它是最便携的方法(因为所有浏览器都应该能够处理它)......
  • colors[]=red&colors[]=blue&colors[]=green 当我使用 http_build_query 时变成 0=red&1=blue&2=green - 如何重建查询字符串? (或者甚至在重建之前删除一个值?)
  • @RS7 我已经扩展了我的答案,希望对您有所帮助:)
  • 感谢大家的帮助;)我很难让系统在再次输出查询字符串之前快速/轻松地删除数组的一部分。我对所有这些都是新手,但是是否有一个函数可以查找值并删除该数组条目?我知道我可以做 unset($array['key']) 但是值呢?抱歉 - 我对这一切都很陌生。
猜你喜欢
  • 1970-01-01
  • 2017-05-01
  • 2013-06-10
  • 2012-01-17
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
  • 2019-07-29
相关资源
最近更新 更多