在分页期间保持url参数

yeh*_*uda 4 php pagination

在分页时是否有任何方法可以保留我的GET参数.

我的问题是我有几个不同的网址即

questions.php?sort=votes&author_id=1&page=3

index.php?sort=answers&style=question&page=4
Run Code Online (Sandbox Code Playgroud)

在我的分页课程中,我应该创建一个指向页面的链接,但页面上有不同的页码,但仍保留网址的其他部分?

Nav*_*mar 6

您可以使用http_build_query().它比手动删除旧参数更清晰.

应该可以传递由$ _GET和新值组成的合并数组,并获得一个干净的URL.

$new_data = array("currentpage" => "mypage.html");
$full_data = array_merge($_GET, $new_data);  // New data will overwrite old entry
$url = http_build_query($full_data);
Run Code Online (Sandbox Code Playgroud)


Rya*_*mpt 6

如果您想编写自己的函数来执行类似 http_build_query 的操作,或者由于某种原因需要自定义它的操作:

<?php 
function add_edit_gets($parameter, $value) { 
    $params = array(); 
    $output = "?"; 
    $firstRun = true; 
    foreach($_GET as $key=>$val) { 
        if($key != $parameter) { 
            if(!$firstRun) { 
                $output .= "&"; 
            } else { 
                $firstRun = false; 
            } 
            $output .= $key."=".urlencode($val); 
         } 
    } 

    if(!$firstRun) 
        $output .= "&"; 
    $output .= $parameter."=".urlencode($value); 
    return htmlentities($output); 
} 

?>
Run Code Online (Sandbox Code Playgroud)

然后你可以写出你的链接,如:

<a href="<?php echo add_edit_gets("page", "2"); ?>">Click to go to page 2</a>
Run Code Online (Sandbox Code Playgroud)


hak*_*kre 5

简而言之,您只需解析URL,然后在最后添加参数或替换它(如果已存在).

$parts = parse_url($url) + array('query' => array());
parse_str($parts['query'], $query);
$query['page'] = $page;
$parts['query'] = http_build_str($query);
$newUrl = http_build_url($parts);
Run Code Online (Sandbox Code Playgroud)

此示例代码要求PHP HTTP模块用于http_build_urlhttp_build_str.后者可以替换http_build_query为第一个,如果没有安装模块,则存在PHP用户空间实现.

另一种方法是使用Net_URL2提供各种URL操作接口的包:

$op = new Net_URL2($url);
$op->setQueryVariable('page', $page);
$newUrl = (string) $op;
Run Code Online (Sandbox Code Playgroud)

它更灵活,更富有表现力.