Более надежным способом обработки строк запроса будет их фактический анализ.
// If your original query string was just the data in $_GET, clone $_GET:
$new_query = $_GET;
// Otherwise, parse the original query string using parse_str:
parse_str($original_query_string, $new_query);
// Then, set the new cat value, and build a new query string.
$new_query['cat'] = 4;
$new_query_string = http_build_query($new_query);
Техника, которую вы первоначально описали, - это работа с регулярным выражением:)
$queryString2 = preg_replace('/cat=[0-9]+/', 'cat=4', $queryString);
Регулярное выражение cat=[0-9]+
соответствует строке cat=
, за которой следуют одна или несколько (+
) цифр ([0-9]
). preg_replace
заменяет все совпадения регулярного выражения (аргумент 1), найденные в исходной строке (аргумент 3), строкой замены (аргумент 2) и возвращает результат.
Обратите внимание, что это также заменит dog_and_cat=1
на dog_and_cat=4
. ответ borkweb является более сложным регулярным выражением, но обрабатывает этот крайний случай, если он может возникнуть (например, это строка запроса, предоставленная пользователем).
Я предпочитаю фактический синтаксический анализ запроса, но решение с регулярными выражениями в идеале должно работать точно так же, без учета крайних случаев.