大量のデータをページを区切って表示させたいときがあります。その場合、データを配列に格納し、表示したい件数分だけ配列から取り出して表示します。
取り出した配列=arry_slice(元の配列,取り出し開始位置,取り出す件数);
配列の指定した場所からある件数分だけ取り出すにはarry_slice();を用います。開始位置を後から指定するには-(負)を指定します。最後尾は-1です。取り出す件数を指定しなければ開始位置よりすべてを取り出します。取り出す件数が-(負)の場合は、その数を除いた分を取り出します。
取り出し開始位置はページ数との計算により導きます。
<?php
header("Content-type: text/html; charset=shift_jis");
$thisphp="page.php";
$page_line_num=5;#1つのページに表示させたい件数
if(!$page_num=$_GET["page"]){$page_num=1;}#最初は1ページ目とする
$array=array('1行目','2行目','3行目','4行目','5行目','6行目','7行目','8行目','9行目','10行目',
'11行目','12行目','13行目','14行目','15行目','16行目','17行目','18行目','19行目','20行目',
'21行目','22行目','23行目','24行目'
);
$page_array=array_slice($array,($page_num-1)*$page_line_num,$page_line_num);#表示する分だけ別の配列に格納する 配列は0から数えるので処理上は1ページ目は0ページ目とする
print_r($page_array);#現在のページで表示される中身を確認
$next_page=$page_num+1;#次のページ
$back_page=$page_num-1;#前のページ
if($back_page >= 1){$back_str='<a href="'.$thisphp.'?page='.$back_page.'">前へ</a>';}#現在より前のページが存在すれば戻るリンクを作る
else{$back_str='<span style="color:gray">前へ</span>';}#存在しなければグレイ色で薄く表示
if(count($array) > ($next_page-1)*$page_line_num){$next_str='<a href="'.$thisphp.'?page='.$next_page.'">次へ</a>';}#現在より後のページが存在すれば進むリンクを作る
else{$next_str='<span style="color:gray">次へ</span>';}
$all_page_num=count($array) / ($page_line_num-1);#全部のページ数を計算
for($i=1;$i<$all_page_num;$i++){#存在するページ番号を生成
if($i != $page_num){$page_str.='[<a href="'.$thisphp.'?page='.$i.'">'.$i.'</a>]';}
else{$page_str.='[<span style="color:gray">'.$i.'</span>]';}
}
print '<p>'.$back_str.' '.$page_str.' '.$next_str.'</p>';#ページを切り替えるリンクを表示する
?>
※上記は表示サンプルのためリンク先は存在しません。