Удалить старый параметр в URL (PHP) - PullRequest
4 голосов
/ 15 сентября 2010

Я использую PHP для создания нумерации страниц для таблицы.Я использую следующий код для создания ссылки нумерации страниц

<a class='page-numbers' href='$href&pagenum=$i'>$i</a>

с $ href

$href = $_SERVER['REQUEST_URI'];

Работает хорошо, однако, он портится в адресной строке, добавляя каждый разновый параметр страницы.Таким образом, становится pagenum = 1 & pagenum = 3 & pagenum = 4 ....

Как это улучшить?

Ответы [ 2 ]

7 голосов
/ 15 сентября 2010

Как насчет этого? Пошел и проверил, чтобы быть уверенным:)

<?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 ?>
1 голос
/ 15 сентября 2010
$url = $_SERVER['REQUEST_URI'];
$urlparams = parse_url($url);
if(isset($urlparams['query']){
   parse_str($urlparams['query'],$vars);
   $vars['pagenum'] = $i;
   $urlparams['query'] = http_build_query($vars);
} else {
   $urlparams['query'] = 'pagenum='.$i;
}
$url = http_build_url($urlparams);
//http_build_url() is in PECL, you might need to manually rebuild the 
//url by looping through it's components:
/*
   $url=(isset($urlparams["scheme"])?$urlparams["scheme"]."://":"").
       (isset($urlparams["user"])?$urlparams["user"]:"").
       (isset($urlparams["pass"])? ":".$urlparams["pass"]:"").
       (isset($urlparams["user"])?"@":"").
       (isset($urlparams["host"])?$urlparams["host"]:"").
       (isset($urlparams["port"])?":".$urlparams["port"]:"").
       (isset($urlparams["path"])?$urlparams["path"]:"").
       (isset($urlparams["query"])?"?".$urlparams["query"]:"").
       (isset($urlparams["fragment"])?"#".$urlparams["fragment"]:""); 
*/
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...