Php 多数组分页算法?
拥有Php 多数组分页算法?,php,multidimensional-array,pagination,Php,Multidimensional Array,Pagination,拥有$A是分页的数据: $A = array( 0=>array( 0=>1, 1=>2 ), 1=>array( 0=>3, 1=>5, 2=>2 ), 2=>array( 0=>3, 1=>1, 2
$A
是分页的数据:
$A = array(
0=>array(
0=>1,
1=>2
),
1=>array(
0=>3,
1=>5,
2=>2
),
2=>array(
0=>3,
1=>1,
2=>6,
3=>6
)
);
我有一个函数
// page to show (1-indexed)
// number of items to show per page
function paging_from_multi_arr($display_array, $page){
Global $show_per_page;
$start = $show_per_page * ($page-1);
$end = $show_per_page * $page;
$i = 0;
foreach($display_array as $main_order=>$section){
$total = 0;
foreach($section as $sub_order=>$value){
if($i >= $end){
break 2; // break out of both loops
}
$total += $value;
if($i >= $start){
echo $value.'<br>';
}
$i++;
}
if($i >= $start){
echo 'Total:'.$total.'<br>';
}
if($i >= $end){
break;
}
}
}
输出(第一页):
输出(第二页):
输出(第三页):
如果我设定
$show_per_page = 9;
$show_per_page = 5;
输出:
1
2
Total:3
3
5
2
Total:10
3
1
6
6
Total:16
如果我设定
$show_per_page = 9;
$show_per_page = 5;
输出(第一页):
输出(第二页):
这应该是一个起点:
function paging_from_multi_arr($page,$A){
global $show_per_page;
$start = ($page-1)*$show_per_page;
$end = $page*$show_per_page;
$flat_array = array();
foreach ($A as $sub_array) {
$flat_array = array_merge($flat_array, $sub_array);
}
$slice = array_slice($flat_array, $start, $show_per_page);
foreach ($slice as $key => $value) {
echo $value;
echo "\n";
}
}
为什么不在函数的末尾添加类似的内容:
$total = 0;
foreach($display_array as $main_order => $section){
$total += count($section);
}
if ($end < $total){
echo "....";
}
$total=0;
foreach($main\u顺序=>$section显示数组){
$total+=计数($section);
}
如果($end<$total){
回声“…”;
}
这应该可以:
// page to show (1-indexed)
// number of items to show per page
function paging_from_multi_arr($display_array, $page){
Global $show_per_page;
$start = $show_per_page * ($page-1);
$end = $show_per_page * $page;
$i = 0;
foreach($display_array as $main_order=>$section){
$total = 0;
foreach($section as $sub_order=>$value){
if($i >= $end){
break 2; // break out of both loops
}
$total += $value;
if($i >= $start){
echo $value.'<br>';
}
$i++;
}
if($i >= $start){
echo 'Total:'.$total.'<br>';
}
if($i >= $end){
break;
}
}
$total = count($display_array, COUNT_RECURSIVE);
// Total numbers of elements in your array.
// See http://php.net/manual/en/function.count.php
if ($end < $total){
echo "....";
}
}
//要显示的页面(1-索引)
//每页要显示的项目数
函数从多数组分页($display\u array,$page){
全球$show_/页;
$start=$show_per_page*($page-1);
$end=$show_per_page*$page;
$i=0;
foreach($main\u顺序=>$section显示数组){
$total=0;
foreach($sub_order=>$value){
如果($i>=$end){
断开2;//断开两个循环
}
$total+=$value;
如果($i>=$start){
回显$value。“
”;
}
$i++;
}
如果($i>=$start){
回显“总计:”.$Total.“
”;
}
如果($i>=$end){
打破
}
}
$total=count($display\u array,count\u RECURSIVE);
//数组中元素的总数。
//看http://php.net/manual/en/function.count.php
如果($end<$total){
回声“…”;
}
}
你可以考虑在这个问题上增加一个赏金。不明白你在这里说什么吗?如果这样使用,我们循环两个时间。用同样的数据,没什么比这更好,你认为什么?
3
1
6
6
Total:16
function paging_from_multi_arr($page,$A){
global $show_per_page;
$start = ($page-1)*$show_per_page;
$end = $page*$show_per_page;
$flat_array = array();
foreach ($A as $sub_array) {
$flat_array = array_merge($flat_array, $sub_array);
}
$slice = array_slice($flat_array, $start, $show_per_page);
foreach ($slice as $key => $value) {
echo $value;
echo "\n";
}
}
$total = 0;
foreach($display_array as $main_order => $section){
$total += count($section);
}
if ($end < $total){
echo "....";
}
// page to show (1-indexed)
// number of items to show per page
function paging_from_multi_arr($display_array, $page){
Global $show_per_page;
$start = $show_per_page * ($page-1);
$end = $show_per_page * $page;
$i = 0;
foreach($display_array as $main_order=>$section){
$total = 0;
foreach($section as $sub_order=>$value){
if($i >= $end){
break 2; // break out of both loops
}
$total += $value;
if($i >= $start){
echo $value.'<br>';
}
$i++;
}
if($i >= $start){
echo 'Total:'.$total.'<br>';
}
if($i >= $end){
break;
}
}
$total = count($display_array, COUNT_RECURSIVE);
// Total numbers of elements in your array.
// See http://php.net/manual/en/function.count.php
if ($end < $total){
echo "....";
}
}