私はアイテムのグループを持っています(例:カウント[3,2,0,4,1,0,1,1,1,0,5,2,3])。ページ(最後のページを除く)。 array_sliceは現在counts配列を入力として使用していますが、最終的には対応するデータを入力として使用しています。最終版では、現在表示されているページに対してarray_sliceを1回だけ使用します。コードは、特別なPHPの関数を使用して、よりエレガント例えばを作ることができる場合、私は思っていたなどPHPをよりエレガントにページに分割するPHP?
出力:ページあたり
アイテム:1つのNUMページ:10
3。 2; 0,4; 1; 0,1; 1; 1; 0,5; 2; 3;
個数:2 numページ:8
3; 2; 0,4; 1,0,1; 1,1; 0,5; 2; 3;
ページあたりのアイテム数:3 num pages:5
3; 2,0,4; 1,0,1,1; 1,0,5; 2,3;ページあたり
アイテム:4つのNUMページ:5
3,2; 0,4; 1,0,1,1,1; 0,5; 2,3;ページあたり
アイテム:5つのNUMページ:4
3,2; 0,4,1; 0,1,1,1,0,5; 2,3;
ページあたりの項目数:6 num pages:3
3,2,0,4; 1,0,1,1,1,0,5; 2,3;
<?php
$group_counts = [3,2,0,4,1,0,1,1,1,0,5,2,3];
splitOntoPages($group_counts, 1);
splitOntoPages($group_counts, 2);
splitOntoPages($group_counts, 3);
splitOntoPages($group_counts, 4);
splitOntoPages($group_counts, 5);
splitOntoPages($group_counts, 6);
function splitOntoPages($item_group_counts, $items_per_page) {
$page_cumul_totals = [0 => 0];
$page_first_index = [0 => 0];
$page = 0;
foreach ($item_group_counts as $group_index => $group_total) {
$page_cumul_totals[$page] += $group_total;
if ($page_cumul_totals[$page] >= $items_per_page) {
$page++;
$page_first_index[$page] = $group_index + 1;
$page_cumul_totals[$page] = 0;
}
}
$page_first_index[$page + 1] = $group_index + 1;
$numPages = count($page_cumul_totals);
if ($page_cumul_totals[$numPages - 1] == 0) {
$numPages--;
}
echo 'Items per page: '.$items_per_page.' num pages: '.$numPages.'<br>';
for ($p = 0; $p < $numPages; $p++) {
$fromIndex = $page_first_index[$p];
$countOnPage = $page_first_index[$p + 1] - $fromIndex;
$page_items = array_slice($item_group_counts, $fromIndex, $countOnPage);
echo implode(',', $page_items).'; ';
}
echo '<br><br>';
}
私の目標は、特定のページ番号に基づいてarray_sliceの正しいパラメータを決定するために...ともページ数を決定することです。
$ page_items = array_slice($ item_groups、$ fromIndex、$ countOnPage);
あなたコードはうまくいきますし、コードを改善することができますか、実際にコード内に何か問題がありますか? – Xatenev
エコーから離れて私にはうまく見えます。 'splitOntoPages'内で単一のループを使ってページの2D行列を返し、関数外の別のループでそれらを表示して、ページングロジックを表現から分離します。 –
Xatenev:最近、私はarray_map、array_walkなどのようなものを使っています。コードをよりエレガントにして、ここで使用できる他のものがあるかどうか疑問に思っていました。 –