3 回答

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

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

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).
- 3 回答
- 0 关注
- 179 浏览
添加回答
举报