【问题标题】:How to do a pagination from array?如何从数组进行分页?
【发布时间】:2011-06-15 04:56:33
【问题描述】:

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

$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 

【问题讨论】:

  • 那么你的问题是什么?还是您只是想找人来做您的工作?
  • 你能描述一下你想要操纵什么吗?
  • $end = $start + $show_per_page;确定吗?
  • $end = $page * $show_per_page;
  • @python - 我可以看到你的代码中有什么。您以这种方式设置 $end 有什么特别的原因吗?这意味着您将在每个页面上显示不同数量的条目

标签: php pagination


【解决方案1】:

看看这个:

    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”)?

【讨论】:

  • 其他情况没问题,但我有测试,$show_per_page = 4 我没有得到总数。
  • and $show_per_page = 1 我有两个条目显示,实际上它应该只有一个条目。
  • 为什么你 $offset = $show_per_page + 1;因为它并不总是这样。Marcin
  • @python。如果您有 $show_per_page = 2 ,则返回数组的 3 个元素。如果你有 $show_per_page = 3 比你想要 4 个元素。但是当 show_per_page = 4 你想要 6 个元素?为什么是 6 而不是 5?我不明白这个分页应该如何工作。
  • 你在哪里给了我提示,也许我用比这个更好的数据结构再次提出问题。非常感谢,
【解决方案2】:

使用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);
}

或在 PHP 7 中

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

【讨论】:

  • array_chunk 的想法非常好,谢谢。 . .现在来建立一个基于此的菜单系统。 :)
【解决方案3】:

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

【讨论】:

  • 为什么总 = sizeof($inputArray);?
猜你喜欢
  • 2016-11-06
  • 1970-01-01
  • 2019-06-08
  • 2011-03-27
  • 1970-01-01
  • 1970-01-01
  • 2020-01-18
  • 2020-02-18
  • 2013-06-09
相关资源
最近更新 更多