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 關注
- 234 瀏覽
添加回答
舉報