我有一个数组,其中包含我希望用分页显示的数据。
$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
答案 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); / 数组中的项目总数 /