Paginate一个阵列

时间:2011-02-01 22:47:16

标签: php

我有一个数组$ myarray; 我想对数组内容进行分页,这是我在想的事情:

//Find total number of rows
        $all_rs = $newArrayOfRows;
        $this->total_rows = count($all_rs);


        //Max number of pages
        $this->max_pages = ceil($this->total_rows / $this->rows_per_page );
        if ($this->links_per_page > $this->max_pages) {
            $this->links_per_page = $this->max_pages;
        }


        //Check the page value just in case someone is trying to input an aribitrary value
        if ($this->page > $this->max_pages || $this->page <= 0) {
            $this->page = 1;
        }


        //Calculate Offset
        $this->offset = $this->rows_per_page * ($this->page - 1);


        //Fetch the required result set

如何加入所有这些信息,以便从我的初始数组中获取每个页面所需的信息? Ty非常

4 个答案:

答案 0 :(得分:2)

我猜你的变量$all_rs你的数组是数据库结果集。

如果是这样,您应该只从数据库中获取要在该给定页面上显示的行。

您不应该获取表中的每一行,只显示其中的一些。一旦您的网站有一些真正的流量,这样做对您的服务器来说太多了,整个网站将停止运作。要求提供超出您需要的数据......

  1. 浪费记忆,保存您永远不会使用的所有结果
  2. 浪费时间/带宽将它们从数据库服务器传输到PHP
  3. 浪费CPU时间查找您不会使用的行
  4. 浪费磁盘IO读取您将不会从硬盘使用的行
  5. 通过使用少量大型结果集填充查询缓存而不是许多较小的结果集来浪费更多RAM。
  6. 要仅获取所需的行,请在SQL查询中使用LIMIT子句,该子句允许您指定要检索的行数和偏移量(要跳过的行数)。逻辑基本上与您现在想出的方法相同,以弄清楚如何切割数组。相反,您可以使用它来确定要在数据库查询的LIMIT部分中放入哪些数字。

答案 1 :(得分:0)

数组切片应该这样做。

array array_slice(array, offset[, length]);
array: Base array to be used
int offset: Starting element index
int length (optional):

但是你确定要像这样复制你的数据吗?

您可能只想要一个访问者,为您提供第一项页面

$ item = c-&gt; getItem($ pageNumber,$ itemNumber);

答案 2 :(得分:0)

$array = array_slice($all_rs, $this->offset, $this->rows_per_page);

所以$array将包含所需的子集。

答案 3 :(得分:0)

看起来$newArrayOfRows是我的。 ;)

//Find total number of rows
$all_rs = $newArrayOfRows;
$this->total_rows = count($all_rs);


//Max number of pages
$this->max_pages = ceil($this->total_rows / $this->rows_per_page );
if ($this->links_per_page > $this->max_pages) {
    $this->links_per_page = $this->max_pages;
}


//Check the page value just in case someone is trying to input an aribitrary value
if ($this->page > $this->max_pages || $this->page <= 0) {
    $this->page = 1;
}


//Calculate Offset
$this->offset = $this->rows_per_page * ($this->page - 1);


//Fetch the required result set

for($n = $this->offset;$n < $this->rows_per_page;$n++){
    $thisPageArray[] = $newArrayOfRows[$n];
}

//NOW $thisPageArray HAS THE ROWS OF THIS PAGE.