【PHP】ページ送り機能|連番で振っていくバージョン

php

phpの案件でデータを10件ずつ表示されて次のデータを表示するときに「次」「前」とかページ送りにするけど、そうではなくて「1,2,3,4」と連番をふっていくような仕組みを作成したときのメモ。
ただ自分で試してみた簡易バージョン。CSVで管理した場合なのでデータベースの場合はプログラムが変わってくる

ページ送りするときに必要な変数

ページ送りにするときに、必要な変数を用意する。最大データ表示数を格納する変数など

$id=0;            //クリックした時の番号を格納する変数
$max=5          //データを表示する最大 1ページに5件。
$pageNum=0       //取得したデータが何ページになるかを格納する変数
$start=0;        //データを表示位置の番号を格納する 2ページ目は6番目のデータから。
$end=0;         //データの表示終了位置を格納する。 2ページ目だと10番目のデータまで。

$total=0;       //データの総数を格納する変数。
$counter=0;    //データの最初の行は不要なのでそれを省くために1行ごとにカウントさせて0番目以外を処理する
$datalist=arrray();  //csvで管理してるので一行ごとのデータをまとめるための多次元配列

といった具合に変数を用意しておく

ページ送りに必要なロジック部分を作成する

今回はcsvからデータを取り出してるが、全体の流れを下記のような流れで割り出す

  1. クリックした番号を$idに格納する
  2. csvから配列$dataに一行分のデータを抜き出しそれをまとめた多次元配列$datalistに格納する
  3. $totalにcount()関数で配列総数を格納 
  4. $totalを$maxで割った整数が$pageNumとなる
  5. クリックされた番号に$maxをかけた数値を割り出し$startに格納
  6. $startに$maxを足すことで$endを割りだし格納する
$csvfile="csv/test.csv";

        if(!empty($_GET["id"])){
           $id=$_GET["id"];         
        }else{
            $id=0;
        }       

        $fp=  fopen($csvfile,"r") or die("file open error");
        flock($fp, LOCK_EX);
        //
        while($data=fgetcsv($fp,4000,",")){
            //最初の一行は列の説明のため不要
            if($counter!=0){               
                array_push($datalist,$data);
            }
            //
            $counter++;
        }
        flock($fp,LOCK_UN);
        fclose($fp);
        //
        $total=count($datalist); //データの総数
        $pageNum=  ceil($total/$max); //ページの総数
        $start=$id*$max; //データ表示の開始位置
        $end=$start+$max; //データ表示の終了位置 開始位置から5つのデータ

ページ送りのナビゲーションを作成

$pageNumさえ割り出せれば、ナビゲーションの作成は簡単なので説明不要です。
クリックデータは$_GETで送信させます。クリックしたidは配列インデックスが0から始まるが表示は1番目から表示させます。(配列のインデックスが0番目から始まるので・・)


データを表示させる

csvからデータを5つずつ表示させるロジック。ポイントは$startと$endがポイントになります。
上記で$startと$endの割り出し方を書きましたが、両方の変数を元にfor文で$datalistの配列のインデックス番号をずらすことでデータ表示させてます。

    番号:".$id."|名前:".$name."|年齢:".$age."|職業:".$job.""; } } ?>

動作確認