Более простое решение (ИМХО и более удобное в обслуживании) заключается в использовании array_filter()
для удаления любых значений, которые вам не нужны в исходном коде, а не метода flip / unset / flip. .
$a = parse_url("http://example.com?tag=test1&creative=165953&creativeASIN=B07BH2N15X&linkCode=df0&ascsubtag=test2");
parse_str($a['query'], $queryStr);
$interchanged = array_filter($queryStr, function($value) { return ( $value != "test1" && $value != "test2");});
echo $a['scheme'] . "://" . $a['host'] . (isset($pURL['path']) ? $pURL['path'] : '') . "?" . http_build_query($interchanged);