带有上一个和下一个选项卡的数组的 PHP 分页


php pagination of an array with previous and next tab

我有这个数组,其中包含大约 1000 条记录。我想每页显示 20 条数组记录。

  $list=array(
    array([title]=>"sony", [description]=>"camera"),
    array([title]=>"sony", [description]=>"mobiles"),
    array([title]=>"lenovo", [description]=>"laptop"),
    array([title]=>"lenovo", [description]=>"mobiles")
    );

我使用以下代码进行分页。它给了我很长的分页时间。
有人可以帮助我将上一个和下一个代码包含在我现有的代码中,以便我的分页看起来不错。

$page = isset($_REQUEST['page']) && $_REQUEST['page'] > 0 ? $_REQUEST['page'] : 1;      
    function display($list, $page = 1) 
    {
    $start = ($page - 1) * 2;
    $list = array_slice($list, $start, 15);
    foreach ($list as $key => $val) {
        echo $val['title'] . '<br/>';
        echo $val['description'] . '<br/>';
        echo "<br>";
    }} $len = count($list);
    $pages = ceil($len / 2);
    if ($page > $pages or $page < 1)
     {
        echo 'page not found';
    }
    else
     {
        display($list, $page);
        for ($i = 1 ; $i <= $pages ; $i++)
        {
            $current = ($i == $page) ? TRUE : FALSE;
            if ($current) {
                echo '<b>' . $i . '</b>';
            }
            else
            {
                ?>
    <a href="http://localhost/flipkart-api/fkt_offer.php?offer=alloffers&page=<?php echo $i;?>"><?php echo $i;?></a>
    <?php
            }
        }
    }

下面是您问题中的数据数组的示例。

示例

  • 假定页面大小为 2(您的问题中为 20)。
  • 数据数组的大小无关紧要。
  • 启动参数通过 GET 参数 http://localhost/flipkart-api/fkt_offer.php?...start=index_or_page 提供(如示例中所示)。
    此参数在脚本中以 $_GET['start'] 的形式提供。
  • 将计算上一个和下一个开始指数($start +/- $maxpage等)。
  • 为了使此示例简单,我将起始索引(而不是页码)作为参数。当然,您也可以使用页码并计算索引。
  • 为了简洁起见,我省略了错误检查("如果没有更多项目怎么办"等)。

法典:

    <?php
        // The data array
        $list=array(
            array('title'=>"sony",   'description'=>"camera"),
            array('title'=>"sony",   'description'=>"mobiles"),
            array('title'=>"lenovo", 'description'=>"laptop"),
            array('title'=>"lenovo", 'description'=>"mobiles")
        );
        // Evaluate URL
        $proto = ((isset($_SERVER["HTTPS"])) && (strtoupper($_SERVER["HTTPS"]) == 'ON')) ? "https://" : "http://";
        $hname = getenv("SERVER_NAME");
        $port = getenv("SERVER_PORT");
        if ( (($port==80)&&($proto=='http://')) || (($port==443)&&($proto=='https://')) ) { $port = ''; }
        $params = '';
        foreach ($_GET as $key=>$value) {
            if (strtolower($key)=='start') continue;
            $params .= (empty($params)) ? "$key=$value" : "&$key=$value";
        }
        $url = $proto . $hname . $port. $_SERVER['SCRIPT_NAME'] . '?' . $params;
        // Page contents
        $last = count($list)-1;
        $start = (isset($_GET['start'])) ? intval($_GET['start']) : 0;
        if ($start<0) $start = 0; if ($start > $last) $start = $last;
        $maxpage = 2;
        echo "<p>Start index = $start</p>" . PHP_EOL;
        $curpage = 0;
        for($xi=$start; $xi<=$last; $xi++) {
            if ($curpage >= $maxpage) break;
            $curpage++;
            echo 'Entry ' . $curpage . 
                ':  ' . $list[$xi]['title'] . 
                ' - ' . $list[$xi]['description'] . 
                '<br />' . PHP_EOL;
        }
        // Navigation
        $prev = $start - $maxpage; if ($prev<0) $prev = 0;
        $next = ( ($start+$maxpage) > $last) ? $start : $start + $maxpage;
        $prev = ( ($start-$maxpage) < 0) ? 0 : $start - $maxpage;
        echo '<p><a href="'.$url.'&start='.$prev.'">Previous</a>&nbsp;&nbsp;';
        echo '<a href="'.$url.'&start='.$next.'">Next</a></p>';
    ?>

结果(例如)

    Start index = 2
    Entry 1: lenovo - laptop
    Entry 2: lenovo - mobiles
    Previous  Next