【问题标题】:How to add PHP pagination in array's如何在数组中添加 PHP 分页
【发布时间】:2014-12-14 14:12:34
【问题描述】:

我一直在尝试很多方法来添加 PHP 分页。我已经尝试搜索并试图找出实现分页的其他方法,但它们都不起作用。

这是我创建索引页面的方式:

<?php
$menuItems = array(
    "post1" => array(
        "title" => "Sample Title",
        "utime" => "M/d/Y",
        "content" => "<p>Body of the post</p>"
    ),

    "post2" => array(
        "title" => "Another Sample Title",
        "utime" => "M/d/Y",
        "content" => "<p>Content goes here...</p>"
    ),
);

foreach ($menuItems as $contItem => $item) {
?>
<li>
     <a href="dish.php?item=<?php echo $contItem; ?>">
         <h1><?php echo $item["title"]; ?></h1>
         <small><?php echo $item["utime"]; ?></small>
     </a>
</li>
<?php } ?>

我想知道如何对数组列表进行分页。谢谢!

【问题讨论】:

    标签: php arrays pagination


    【解决方案1】:

    你可以使用简单的 PHP 函数 array_slice()

    $menuItems = array_slice( $menuItems, 0, 10 ); 
    

    显示前 10 个项目。

    $menuItems = array_slice( $menuItems, 10, 10 );
    

    显示接下来的 10 个项目。

    更新:

    $page = ! empty( $_GET['page'] ) ? (int) $_GET['page'] : 1;
    $total = count( $yourDataArray ); //total items in array    
    $limit = 20; //per page    
    $totalPages = ceil( $total/ $limit ); //calculate total pages
    $page = max($page, 1); //get 1 page when $_GET['page'] <= 0
    $page = min($page, $totalPages); //get last page when $_GET['page'] > $totalPages
    $offset = ($page - 1) * $limit;
    if( $offset < 0 ) $offset = 0;
    
    $yourDataArray = array_slice( $yourDataArray, $offset, $limit );
    

    更新#2:

    分页示例:

    $link = 'index.php?page=%d';
    $pagerContainer = '<div style="width: 300px;">';   
    if( $totalPages != 0 ) 
    {
      if( $page == 1 ) 
      { 
        $pagerContainer .= ''; 
      } 
      else 
      { 
        $pagerContainer .= sprintf( '<a href="' . $link . '" style="color: #c00"> &#171; prev page</a>', $page - 1 ); 
      }
      $pagerContainer .= ' <span> page <strong>' . $page . '</strong> from ' . $totalPages . '</span>'; 
      if( $page == $totalPages ) 
      { 
        $pagerContainer .= ''; 
      }
      else 
      { 
        $pagerContainer .= sprintf( '<a href="' . $link . '" style="color: #c00"> next page &#187; </a>', $page + 1 ); 
      }           
    }                   
    $pagerContainer .= '</div>';
    
    echo $pagerContainer;
    

    【讨论】:

    • 这看起来根本不是动态的,我的意思是我将不得不手动写入数组的编号,有没有办法让动态分页自动计数数组并进行分页?
    • 它显示了一些错误消息,例如:注意:未定义变量:C:\xampp\htdocs\www\arrayTest\index.php 中的 yourDataArray 第 36 行 - 注意:未定义变量:C 中的 yourDataArray :\xampp\htdocs\www\arrayTest\index.php 第 44 行 - 警告:array_slice() 期望参数 1 为数组,在第 44 行的 C:\xampp\htdocs\www\arrayTest\index.php 中给出空值
    • $yourDataArray 变量更改为$menuItems 它只是存储项目的数组名称。
    • 它有效,但我在哪里回显下一个 - 1234.. 和上一个链接以及如何。谢谢你:)
    • 因为我不知道这些分页。
    【解决方案2】:

    另一个可行的选择是使用array_chunk()

    $pagedArray = array_chunk($originalArray, 10, true);
    $nthPage = $pagedArray[$pageNumber];
    

    【讨论】:

      猜你喜欢
      • 2015-12-20
      • 2015-10-30
      • 2018-02-13
      • 1970-01-01
      • 2017-09-03
      • 2011-09-20
      • 2011-07-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多