从查询字符串中添加、更改和删除 GET 参数

假设当前的查询字符串如下


$_SERVER['QUERY_STRING']:

apple=green&banana=yellow2&navi=blue&clouds=white&car=black

我需要一个可以从查询字符串中添加和删除几个参数的函数。例如:


echo ChangeQueryString('eyes=2&fingers=10&car=purple', 'clouds&apple');

应该给


banana=yellow2&navi=blue&car=purple&eyes=2&fingers=10

因此,该函数不仅应该能够添加新参数(eyes=2&finger=10),而且还应该更改已经存在的参数(car=black => car=purple)。


所有这些新的和更改的参数都可以在函数的第一个参数中传递。以“&”分隔。


函数的第二个参数应该传递应该从查询字符串中删除的参数的所有键(如果存在)。


我只管理了可以添加和替换参数的第一部分。但也许有人有更有效的方法,包括从查询字符串中删除内容的第二个参数。


实际上最后我需要完整的当前 URL。这就是我添加 PHP_SELF 的原因。虽然删除部分还没有出现......


function ChangeQueryString ($add, $remove) {


    if (empty($_SERVER['QUERY_STRING'])){


        $final_url = $_SERVER['PHP_SELF']."?".$add;


    } else {


        $query_string_url_addition = $_SERVER['QUERY_STRING'].'&'.$add;


        parse_str($query_string_url_addition, $query_array);


        $final_url = $_SERVER['PHP_SELF']."?".http_build_query($query_array);


    }


    return $final_url;


}


LEATH
浏览 180回答 3
3回答

哈士奇WWW

function changeQueryString($queryStr, $updateStr, $removeStr) {    parse_str($queryStr, $queryArr);    parse_str($updateStr, $updateArr);    parse_str($removeStr, $removeArr);    $changedArr = array_merge($queryArr, $updateArr);    foreach($removeArr as $k => $v) {        if(array_key_exists($k, $changedArr)) {            unset($changedArr[$k]);        }    }    return http_build_query($changedArr);}$str = 'apple=green&banana=yellow2&navi=blue&clouds=white&car=black';$changedQuery = changeQueryString($str, 'eyes=2&fingers=10&car=purple', 'clouds&apple');var_dump($changedQuery);这应该对你有用,利用 parse_str()、array_merge() 和 http_build_query()

慕妹3146593

将查询字符串解析为数组后,您可以合并和比较这些字符串以生成您想要的结果。function ChangeQueryString($original, $add, $remove) {    $new = [];    parse_str($original, $new[0]);    parse_str($add, $new[1]);    parse_str($remove, $delete);    return http_build_query(array_diff_key(array_merge(...$new), $delete));}这只会处理简单的查询字符串。如果有任何嵌套元素,您将需要递归解决方案。但是对于这些答案中的任何一个以及您的原始功能来说都是如此。

烙印99

正如第一条评论指出的那样,如果您使用$_GET全局数组,那么您只是在使用一个数组,您可以在其中以任何方式添加、删除和一般操作。<?php// Sample query string: ?apple=green&banana=yellow2&navi=blue&clouds=white&car=black// You can either copy the query string to a new variable or work with the $_GET array directly.&nbsp;// In this case, I am copying it to a new array to preserve the original.&nbsp;$queryParams = $_GET;// Get the value of clouds$cloudColour = $queryParams ['clouds'];// Change car from black to purple$queryParams['car'] = 'purple';// Change apple to red$queryParams['apple'] = 'red';// Remove bananaunset($queryParams['banana']);// Add person=Mark$queryParams['person'] = 'Mark';最后,正如您已经知道的,您可以使用http_build_query($queryParams).
打开App,查看更多内容
随时随地看视频慕课网APP