Вы просто добавляете новый пареметр к старым, но не заменяете его, если он уже существует. Поэтому вам скорее нужно объединить старую строку запроса с новой:
// either by merging both arrays
$query = array_merge($_GET, array('page'=>1));
// or by the union of both
$query = array('page'=>1) + $_GET;
// or by altering the array
$query = $_GET;
$query['page'] = 1;
И в PHP уже есть http_build_str
, который может создать строку запроса из ассоциативного массива:
print '<a href="?' . htmlspecialchars(http_build_str($query)) . '"><<</a>';
Редактировать Вот альтернативное определение http_build_str
:
if (!function_exists('http_build_str')) {
function http_build_str($query, $prefix='', $arg_separator='') {
if (!is_array($query)) {
return null;
}
if ($arg_separator == '') {
$arg_separator = ini_get('arg_separator.output');
}
$args = array();
foreach ($query as $key => $val) {
$name = $prefix.$key;
if (!is_numeric($name)) {
$args[] = rawurlencode($name).'='.urlencode($val);
}
}
return implode($arg_separator, $args);
}
}