Php 如何从数组进行分页?

Php 如何从数组进行分页?,php,pagination,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($dis

我有一个数组,其中包含要分页显示的数据

$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.
    }
}
分页($display_数组,2)输出:

0602 xxx2
0602 xxxx3
Total:5
0602 xxx3
0602 saa4
Total:7
0602 xxx2
0602 xxxx3
Total: 5 
0602 xxx3
0602 saa4
Total:7
0602 xxx2
0602 xxxx3
Total:5
0602 xxx3
0602 saa4
Total: 7 
如果我定义
$show\u per\u page=3,然后分页($display\u array,1)输出:

0602 xxx2
0602 xxxx3
Total:5
0602 xxx3
0602 saa4
Total:7
0602 xxx2
0602 xxxx3
Total: 5 
0602 xxx3
0602 saa4
Total:7
0602 xxx2
0602 xxxx3
Total:5
0602 xxx3
0602 saa4
Total: 7 
分页($display_数组,2)输出:

0602 xxx2
0602 xxxx3
Total:5
0602 xxx3
0602 saa4
Total:7
0602 xxx2
0602 xxxx3
Total: 5 
0602 xxx3
0602 saa4
Total:7
0602 xxx2
0602 xxxx3
Total:5
0602 xxx3
0602 saa4
Total: 7 
如果我定义
$show\u per\u page=4输出:

0602 xxx2
0602 xxxx3
Total:5
0602 xxx3
0602 saa4
Total:7
0602 xxx2
0602 xxxx3
Total: 5 
0602 xxx3
0602 saa4
Total:7
0602 xxx2
0602 xxxx3
Total:5
0602 xxx3
0602 saa4
Total: 7 
$output=array\u slice($inputArray,$page-1,$showPerPage); $output将包含所需的间隔。 $total=sizeof($inputArray)/数组中的总项可以查看以下内容:

    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);
$show_per_page=3的输出与您的不同,但我不确定您期望的是什么?是否要获取剩下的所有元素(即“0602 saa4”和“7”)加上一个以前的元素(即“0602 xxx3”)

使用:

或者使用Marcin答案的更清晰版本:

function paginate($array, $pageSize, $page = 1)
{
    $page = $page < 1 ? 1 : $page;
    $start = ($page - 1) * $pageSize;
    return array_slice($array, $start, $pageSize);
}
函数分页($array,$pageSize,$page=1)
{
$page=$page<1?1:$page;
$start=($page-1)*$pageSize;
返回数组\u切片($array,$start,$pageSize);
}

那么你的问题是什么?或者你只是在找人做你的工作?你能描述一下你想操纵什么吗?$end=$start+$show\u per\u page;当然可以?$end=$page*$show\u每页@python—我可以看到代码中有什么。您这样设置$end有什么特别的原因吗?这意味着您将在每个页面上显示不同数量的条目为什么total=sizeof($inputArray);?对于其他情况,可以,但我有测试,$show_per_page=4我没有得到总数。而$show_per_page=1我有两个entris显示,事实上它应该只有一个条目。为什么$offset=$show_per_page+1;因为它并不总是这样。Marcin@python. 如果$show_per_page=2,则返回数组的3个元素。如果$show_per_page=3,则需要4个元素。但是当show_per_page=4时,您想要6个元素?为什么6个不是5个?我不明白这个分页应该如何工作。无论你在哪里给我提示,也许我已经用比这个更好的数据结构再次提出了这个问题。非常感谢你,数组块的想法非常好,谢谢你。现在,我们将在此基础上构建一个菜单系统。:)