Как насчет этого? Пошел и проверил, чтобы быть уверенным:)
<?php
$new_get = $_GET; // clone the GET array
$new_get['pagenum'] = $i; // change the relevant parameter
$new_get_string = http_build_query($new_get); // create the foo=bar&bar=baz string
?>
<a class="page-numbers" href="?<?php echo $new_get_string; ?>">
<?php echo $i ?>
</a>
Также обратите внимание, что весь бит $href
не нужен. Если вы начнете href
с ?
, браузер применит строку запроса к текущему пути.
Могу поспорить, что вы собираетесь зацикливаться, так что вот версия, оптимизированная для создания ссылок на 10 000 номеров страниц. Мои тесты показывают, что это происходит немного быстрее при большом количестве ссылок, поскольку вы просто делаете конкатенацию строк вместо полной сборки HTTP-запроса, но этого может быть недостаточно, чтобы о нем беспокоиться Разница действительно значительна только тогда, когда есть пять или шесть параметров GET, но, когда они есть, эта стратегия завершается примерно на половине времени на моей машине.
<?php
$pageless_get = $_GET; // clone the GET array
unset($pageless_get['pagenum']); // remove the pagenum parameter
$pageless_get_string = http_build_query($pageless_get); // create the foo=bar&bar=baz string
for($i = 0; $i < 10000; $i++):
// append the pagenum param to the query string
$page_param = "pagenum=$i";
if($pageless_get_string) {
$pageful_get_string = "$pageless_get_string&$page_param";
} else {
$pageful_get_string = $page_param;
}
?>
<a class="page-numbers" href="?<?php echo $pageful_get_string; ?>">
<?php echo $i ?>
</a>
<?php endfor ?>