为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
LEATH 2021-11-26 15:10:52
假设当前的查询字符串如下$_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;}
查看完整描述

3 回答

?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

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


查看完整回答
反对 回复 2021-11-26
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

将查询字符串解析为数组后,您可以合并和比较这些字符串以生成您想要的结果。


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

}

这只会处理简单的查询字符串。如果有任何嵌套元素,您将需要递归解决方案。但是对于这些答案中的任何一个以及您的原始功能来说都是如此。


查看完整回答
反对 回复 2021-11-26
?
烙印99

TA贡献1829条经验 获得超13个赞

正如第一条评论指出的那样,如果您使用$_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. 

// In this case, I am copying it to a new array to preserve the original. 

$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 banana

unset($queryParams['banana']);


// Add person=Mark

$queryParams['person'] = 'Mark';

最后,正如您已经知道的,您可以使用http_build_query($queryParams).


查看完整回答
反对 回复 2021-11-26
  • 3 回答
  • 0 关注
  • 179 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号