質問: お世話になっております。 表題の件ですが、文字通りPHPのページでページャーをつけたいです。 ### 問題 会員検索のページで会員数が増え、検索結果が多くなってしまった場合にガラケーだと下の方の情報が見切れてしまう事象が発生。 同一ページでもスマホ、PCならすべて表示されているので件数やプログラムの問題ではなく、ガラケーそのものの仕様に依存するものだと思われます。 確実に対応するために今回ページングを設置することになりました。 ### 前提条件 * 既存のページで会員検索結果を表示するもの * 検索条件は複合条件OKで結構煩雑 * 該当データを全件取得した後、他のテーブルからも様々な条件を引っ張ってきて必要な情報を一つの配列に格納 (この過程で入れ子のforeachも数回登場しています...) * 最終的に配列をforeachで全件一覧表示 ### 知りたいこと 条件がこれだけならば`simplePagination.js`を用いて目的のページングが可能なのですが、最大の問題は **ガラケーでの検索に対応する必要がある** ことです。 ガラケーなのでjqueryを用いた`simplePagination.js`は使用できません。 各SQLにLIMITをつけてそもそも取得の件数をコントロールすれば実現するのはわかっているのですが、とにかくそこにたどり着くまでの処理が煩雑なので、できればforeachで回す際にいい感じに処理できないかと思っています。 もし、こういう風に回せば実現できるんじゃない?というようなご意見ありましたらご教授いただければ幸いです。 ### 環境 PHP 5.2.4 MySQL 5.0.45 よろしくお願いいたします。
回答: そういう実装が良いかどうかさておき、だいたい以下のようになるかと思います。 パラメータ:ページ数(今回は1ページ目からとします) 1ページに表示する数は定数なりなんなりで定義 $スキップすべきレコード数=ページ数*1ページの表示数; $一致レコード数=0; $戻すデータ配列=array(); foreach($全件データ as $個々のデータ){ if(検索条件に一致){ $一致レコード数++; if($スキップすべきレコード開始数 >= $一致レコード数){ continue; } $戻すデータ配列[] = $個々のデータ; if($1ページの表示数 === $一致レコード数){ break; } } } 今回は一旦全件データを取得してから条件を確認するものというのが求めることなので、これで良いかと思います。 というのを踏まえた上で、もう一つ方法があるとすれば、全件データを取得するのに負荷が上がるのであれば、 検索条件による検索結果全体(もしくは一位に特定できるキー)を短時間キャッシュして、foreachで規定の場所を探す方法もあります。 全体のレコード数がどういう感じかにもよりますが、負荷が気になるようならば後者も検討すると良いかと思います。