Php 添加具有多个值的Querystring变量
我找到了一些代码,用于剥离查询字符串并向其添加新值,但我希望能够使用一组选项来实现这一点。有人能帮我修改一下代码吗 当前代码:Php 添加具有多个值的Querystring变量,php,function,foreach,preg-replace,Php,Function,Foreach,Preg Replace,我找到了一些代码,用于剥离查询字符串并向其添加新值,但我希望能够使用一组选项来实现这一点。有人能帮我修改一下代码吗 当前代码: function add_querystring_var($url, $key, $value) { $url = preg_replace('/(.*)(\?|&)' . $key . '=[^&]+?(&)(.*)/i', '$1$2$4', $url . '&'); $url = substr($url, 0, -1
function add_querystring_var($url, $key, $value) {
$url = preg_replace('/(.*)(\?|&)' . $key . '=[^&]+?(&)(.*)/i', '$1$2$4', $url . '&');
$url = substr($url, 0, -1);
$value = $value ? "=".urlencode($value) : '';
if (strpos($url, '?') === false)
return ($url . '?' . $key . $value);
else
return ($url . '&' . $key . $value);
}
我希望它对给定的每个键和值进行foreach,然后重建新的url
示例:add\u querystring\u var(curPageURL(),数组(“order”,“sort”),数组(“swn”,“DESC”))
所以我想要下面的URLhttp://www.example.com/students
当执行上述示例时,将返回http://www.example.com/students?order=swn&sort=DESC
function add_querystring_var($url, $additions) {
$parsed = parse_url($url);
if (isset($parsed['query'])) {
parse_str($parsed['query'], $query);
} else {
$query = array();
}
$parsed['query'] = http_build_query(array_merge($query, $additions));
return http_build_url($parsed);
}
有人知道我怎么做吗?我对PHP的这一领域不熟悉。:)
更新:
我忘了提到,有时候url中可能有其他查询,所以我希望它替换我输入到数组中的查询
示例1:http://www.example.com/students?page=2
需要变成http://www.example.com/students?page=2&order=swn&sort=DESC
function add_querystring_var($url, $additions) {
$parsed = parse_url($url);
if (isset($parsed['query'])) {
parse_str($parsed['query'], $query);
} else {
$query = array();
}
$parsed['query'] = http_build_query(array_merge($query, $additions));
return http_build_url($parsed);
}
示例2:http://www.example.com/students?page=2&order=name&sort=ASC
需要变成http://www.example.com/students?page=2&order=swn&sort=DESC
function add_querystring_var($url, $additions) {
$parsed = parse_url($url);
if (isset($parsed['query'])) {
parse_str($parsed['query'], $query);
} else {
$query = array();
}
$parsed['query'] = http_build_query(array_merge($query, $additions));
return http_build_url($parsed);
}
这样使用它:
$new_url = add_querystring_var($url, array('order' => 'swn', 'sort' => 'DESC'));
如果您收到错误,说明未定义http\u build\u url
,请参阅
你正在用这个功能重新发明轮子。。。首先,最好在键/值数据上使用正则表达式,而不是正则表达式(我发现您根本没有对值字符串进行编码) 正如dpDesignz在其评论中提到的,有一个内置功能可用: 或者,以您的示例为例:
$querydata = array("order" => "swn", "sort" => "DESC");
$url = curPageURL();
$concat = "?";
if (strpos($url, "?") !== false)) {
$concat = "&"
}
$url .= $concat . http_build_query($data, '', '&');
为什么不直接使用内置的
http\u build\u query()
函数呢?@Barmar我以前发现过,但不确定在这种情况下如何使用它?有什么建议吗?谢谢,但没用?我只是犯了个错误。函数是否应该有add\u querystring\u var($url,&$additions)
而不是add\u querystring\u var($url,$additions)
?但是我得到了一个错误致命错误:无法在中通过引用传递参数2。为什么添加的内容应该是一个引用参数?它没有改变它。我已经修复了原始URL没有查询字符串的问题。我想我遗漏了什么?我得到了错误致命错误:调用未定义函数http\u build\u url()
是的,我也得到了。我想这只是因为我没有安装可选的PECL软件包,所以希望它能为您工作。谢谢,但现在这只是返回了一个错误parse_url()期望参数1是字符串,从resultthanks中给定的数组
,但我忘了提到我的url中可能有其他值。请查看我的问题更新。为什么它已经有值了?如果您正在构建参数,只需构建查询数据数组,然后在最后使用http\u build\u query()
一次-无论如何,我已经编辑了我的答案以解决此问题。您看到我的更新了吗?它正在提取我当前的URL,并根据需要替换其中的某些值,而不是全部值。希望这是有道理的抱歉,我错过了这一点-可能还有更好的方法,仍然-使用$\u服务器['REQUEST\u URI']在不使用querystring的情况下获取URI,并从$\u get first启动$querydata数组…谢谢,这就是我的想法。我已经写了好几个小时的代码了,但我仍然无法用头脑来思考它。