如何从数组中进行分页?

时间:2011-01-25 13:22:18

标签: php pagination

我有一个数组,其中包含我希望用分页显示的数据。

$display_array = Array
(
    [0] => "0602 xxx2",
    [1] => "0602 xxx3",
    [2] => 5 // Total= 2+3
    [3] => "0602 xxx3",
    [4] => "0602 saa4",
    [5] => 7 // Total = 3+4
)

我尝试过这样的事情

function pagination($display_array, $page)
{   
    global $show_per_page;
    $page = $page < 1 ? 1 : $page;
    $start = ($page - 1) * $show_per_page;
    $end = $page * $show_per_page;
    for($i = $start; $i < $end; $i++)
    {
        ////echo $display_array[$i] . "<p>";
        // How to manipulate this?   
        // To get the result as I described below.
    }
}

我想做一个分页来得到这样的预期结果:

如果我定义$show_per_page = 2;,那么pagination($display_array, 1);输出:

0602 xxx2
0602 xxxx3
Total:5

paganation($display_array, 2);输出:

0602 xxx3
0602 saa4
Total:7

如果我定义$show_per_page = 3;,则pagination($display_array, 1);输出:

0602 xxx2
0602 xxxx3
Total: 5 
0602 xxx3

paganation($display_array, 2);输出:

0602 saa4
Total:7

如果我定义$show_per_page = 4;输出:

0602 xxx2
0602 xxxx3
Total:5
0602 xxx3
0602 saa4
Total: 7 

3 个答案:

答案 0 :(得分:15)

看看这个:

    function paganation($display_array, $page) {
        global $show_per_page;

        $page = $page < 1 ? 1 : $page;

        // start position in the $display_array
        // +1 is to account for total values.
        $start = ($page - 1) * ($show_per_page + 1);
        $offset = $show_per_page + 1;

        $outArray = array_slice($display_array, $start, $offset);

        var_dump($outArray);
    }

    $show_per_page = 2;

    paganation($display_array, 1);
    paganation($display_array, 2);


    $show_per_page = 3;
    paganation($display_array, 1);
    paganation($display_array, 2);

输出结果为:

// when $show_per_page = 2;
array
  0 => string '0602 xxx2' (length=9)
  1 => string '0602 xxx3' (length=9)
  2 => int 5
array
  0 => string '0602 xxx3' (length=9)
  1 => string '0602 saa4' (length=9)
  2 => int 7

// when $show_per_page = 3;
array
  0 => string '0602 xxx2' (length=9)
  1 => string '0602 xxx3' (length=9)
  2 => int 5
  3 => string '0602 xxx3' (length=9)
array
  0 => string '0602 saa4' (length=9)
  1 => int 7

$ show_per_page = 3的输出与你的不同,但我不确定你的期望?你想要获取剩下的所有内容(即'0602 saa4'和7)加上前一个元素(即'0602 xxx3')?

答案 1 :(得分:5)

使用array_chunk

function paginate($array, $pageSize, $page = 1)
{
    $pages = array_chunk($array, $pageSize);
    return $page > sizeof($pages) ? [] : $pages[$page - 1];
}

或使用更清洁版的Marcin答案:

function paginate($array, $pageSize, $page = 1)
{
    $page = $page < 1 ? 1 : $page;
    $start = ($page - 1) * $pageSize;
    return array_slice($array, $start, $pageSize);
}

答案 2 :(得分:0)

$ output = array_slice($ inputArray,$ page-1,$ showPerPage); $ output将包含所需的间隔。 $ total = sizeof($ inputArray); / 数组中的项目总数 /