PHP - 使用http_build_query进行分页会给我重复的参数

时间:2014-01-16 08:22:11

标签: php get pagination

我有这个分页代码

if($pages > 1 && $set <= $pages) {
         ?>
         <div class="pagination-bar">
         <?php
         if($set > 1) {
             ?>
             <a href="?<?php echo http_build_query($_GET); ?>&page=1">&nbsp;<<<&nbsp;</a>
             &nbsp; | &nbsp;
             <a href="?<?php echo http_build_query($_GET); ?>&page=<?php echo ((int)$set - 1) ?>"><<</a>
             &nbsp; | &nbsp;
             <?php
         }

         for($i = 1; $i <= $pages; $i++) {
             ?>
             <a href="?<?php echo http_build_query($_GET); ?>&page=<?php echo $i.""; ?>"><?php echo $i; ?></a>&nbsp; | &nbsp;
             <?php
         }
         if($set < $pages) {
             ?>
             <a href="?<?php echo http_build_query($_GET); ?>&page=<?php echo ((int)$set + 1); ?>">>></a>
             &nbsp; | &nbsp;
             <a href="?<?php echo http_build_query($_GET); ?>&action=list&page=<?php echo $pages; ?>">&nbsp;>>>&nbsp;</a>
             <?php
         }
         ?>
        </div>
        <?php
     }

分页栏看起来很完美:

1 | 2 | 3 | 4 | &GT;&GT; | &GT;&GT;&GT;

&LT;&LT;&LT; | &LT;&LT; | 1 | 2 | 3 | 4 | &GT;&GT; | &GT;&GT;&GT;

问题在于(例如)当我在第1页...

然后我点击Page 3我得到一个像这样的网址:

mypage.php?item=products&page=1&page=3

你可以看到有两个页面&#39;参数......我怎么能避免这个?它仍然有效并显示正确的页面,它似乎忽略了第一个带有通过URL传递的相同名称的get参数。

1 个答案:

答案 0 :(得分:2)

使用array_unique功能

$_GET = array_unique ( $_GET );

或者更好地使用preg_replace功能:

$query = http_build_query($_GET);
$query = preg_replace('/page=\d*/i', '', $query);

所以

<?php
if($pages > 1 && $set <= $pages) {
     $query = http_build_query($_GET);
     $query = preg_replace('/page=\d*/i', '', $query);
     ?>
     <div class="pagination-bar">
     <?php
     if($set > 1) {
         ?>
         <a href="?<?php echo $query ?>&page=1">&nbsp;<<<&nbsp;</a>
         &nbsp; | &nbsp;
         <a href="?<?php echo $query ?>&page=<?php echo ((int)$set - 1) ?>"><<</a>
         &nbsp; | &nbsp;
         <?php
     }

     for($i = 1; $i <= $pages; $i++) {
         ?>
         <a href="?<?php echo $query ?>&page=<?php echo $i.""; ?>"><?php echo $i; ?></a>&nbsp; | &nbsp;
         <?php
     }
     if($set < $pages) {
         ?>
         <a href="?<?php echo $query ?>&page=<?php echo ((int)$set + 1); ?>">>></a>
         &nbsp; | &nbsp;
         <a href="?<?php echo $query ?>&action=list&page=<?php echo $pages; ?>">&nbsp;>>>&nbsp;</a>
         <?php
     }
     ?>
    </div>
    <?php
 }