Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 添加具有多个值的Querystring变量_Php_Function_Foreach_Preg Replace - Fatal编程技术网

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”))

所以我想要下面的URL
http://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数组…谢谢,这就是我的想法。我已经写了好几个小时的代码了,但我仍然无法用头脑来思考它。