配列データの件数指定表示

このQ&Aのポイント
  • テキストファイルに保存してある配列データを制限してページング処理を行いたい
  • 配列データには「OK」または「NO」というデータがあり、「NO」のみを件数制限して表示させたい
  • 次ページに移動した際、11件目からのデータを取得する方法がわからない
回答を見る
  • ベストアンサー

配列データの件数指定表示

こんばんは。お世話になっております。 テキストファイルに保存してある配列データがあり、そのデータを呼び出したとき、10件なり20件なりの件数を制限してページング処理?を行いたいのですが、その配列にある各データには、タブ区切りで「OK」または「NO」というデータも格納されており、「NO」というデータのみを件数を制限して表示させたいと考えてます。(次ページなり前ページなりでページを変えて表示させたい) //$count テキストファイルに格納された配列のデータ数 //$string 配列データ $lim = 10;//件数制限 $ii=1; for($i=0; $i<$count; $i++){ $category_data = $string[$i]; $category_data = explode(' ',$category_data); if(trim($category_data[5]) == "no"){ $ii++; echo "○○\n";//ここにデータを表示 if($ii > $lim){break;} } } 以上が、実際にローカル上で記述しているスクリプトなのですが、先の説明のように、はじめの10件までは表示させることが出来ましたが、次ページに移動した際、11件目からのデータを取得する方法が思いつくことが出来ず、今日も朝からテストを繰り返している状況です。 このような場合、どのようにしたら宜しいのでしょうか? お忙しい中恐縮ですが、アドバイスなど頂戴できれば幸いです。 ※以下の質問も投函しており、解決済みとしておりませんが、今回の質問の延長線上にあるので、「解決済みになっていない」ことをお気づきの場合、ご了承願えればと思います。 http://oshiete1.goo.ne.jp/qa4281205.html

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

フロー的には、以下のいずれかかなぁ・・・ (1)SQLをつかって、適合箇所だけぬきだす (2)CSVやなにかのリストから取り出す場合は、全データをよみこんで、 適合箇所だけ抜き出す (3)カウンタで調整し11~20をほしいなら、カウンタで10番目までとばし、 20番目までカウントした時点でループからぬける

mayu_chap
質問者

お礼

yambejpさま おはよう御座います。お世話になっております。 >全データをよみこんで、適合箇所だけ抜き出す やっぱり、そうなりますか・・。 私も似たようなイメージをもっていたのですが、知己不足が手伝い「もっと違うやり方がある?」などと思っていましたが、回答いただき少し安心しました。このまま作業を進めてみたいと思います。有難う御座いました!

関連するQ&A

  • XML構造体に格納したデータの表示件数制限

    プログラミング初心者です。表示件数をブラウザのデータ表示一覧画面で指定して表示する方法、考え方を教えていただきたいです。 データベースから取得してきた値をXML構造体に格納し、html(XSLT)ページで データ一覧を表示しています。 ・実現したいこと データ表示一覧ページで表示件数を指定して表示したいのですが、例えば500件のデータを取得して100件を一覧ページで表示し次のボタンをクリックすると101件から200件、また次のボタンを押すと201件から300件、戻るボタンを押すと101件から200件を表示したいです。 教えていただきたいのは (1)XML構造体に500件すべて格納してから表示件数を制限できるのか (100件を表示した場合残り400件のデータはどうやって保持するのか) (2)XML構造体にデータを入れる前に、入れる件数を制限してから  表示するのがよいのか(SQLで件数を指定してそれからXMLに格納する) よろしくお願いいたします。

    • 締切済み
    • XML
  • PHPで指定件数のデータを表示させる方法

    お世話になっております。 下記のようなPHPブログラムでitem.csvのデータをランダムに指定件数表示させようと思っています。 このままですとデータは1件か2件表示され、$i<=3にすると2件か3件表示されます。 require_once('common.php'); $Data=file('item.csv'); shuffle ($Data); for ( $i=1; $i<=2; $i++ ){ $line=explode(",",$Data[$i]); print($line[2]); print($line[3]); } これを1を設定すれば1件、3を設定すれば3件というように、数字の件数を表示させたいと思います。 ご教授いただければ幸いです。よろしくお願いいたします。

    • 締切済み
    • PHP
  • 1次元配列のソート方法

    配列のソートメソッドについて質問させていただきます。 VB.NET初心者なので日本語がおかしいかもしれませんが、宜しくお願いいたします。 データテーブルが格納されている配列があり、 その配列をソートしたいと思っています。 データテーブルの中に「NO」と「ID」というフィールドがあります。 NOで昇順し、NOが同じだったらIDの昇順でソートといったことがしたいのですが、 条件によっては上手くいきません。 よろしければ、教えていただけないでしょうか? また、もっと効率の良い方法とかありましたら、具体的はソース等教えていただけないでしょうか? 宜しくお願いいたします。 [例] workDT() ← 元のデータテーブル配列 Dim Datatable(workDt.Rows.Count-1) As DataTable ← ソート後のデータテーブル配列 Dim tmpDatatable(workDT.Rows.Count-1) As DataTable ← 途中で使うデータテーブル配列 Dim NO(workDT.Rows.Count-1) As Integer ← 元のデータテーブル配列の各「NO」フィールドを格納する配列 Dim ID(workDT.Rows.Count-1) As String ← 途中で使うデータテーブル配列の各「ID」フィールドを格納する配列 Dim Index(workDT.Rows.Count-1) As Integer ← インデックスに使用 ' IDでソート For i = 0 To workDt.Length - 1 ID(i) = workDt(i).Rows(0).Item("ID") Index(i) = i Next ' 配列をIDでソート Array.Sort(ID, Index) ' ソート後配列をテンプ配列に格納 For i = 0 To workDt.Length - 1 tmpDatatable(i) = workDt(Index(i)).Copy Next ' NOでソート For i = 0 To tmpDatatable.Length - 1 NO(i) = tmpDatatable(i).Rows(0).Item("NO") Index(i) = i Next ' 配列をNOでソート Array.Sort(NO, Index) ' ソート後配列を格納 For i = 0 To tmpDatatable.Length - 1 Datatable(i) = tmpDatatable(Index(i)).Copy Next これで各配列を初期化します。 workDTに5つのデータテーブルが入っていて workDT(0):ID=3、NO=1 workDT(0):ID=1、NO=5 workDT(0):ID=2、NO=5 workDT(0):ID=4、NO=5 workDT(0):ID=5、NO=7 (IDは重複不可設定、NOは重複可設定です。) とした場合、NOのソートのところで変な順番になってしまいます。 Array.Sort(NO, Index) このメソッドは同じ値だった場合、何を優先してソートしているのでしょうか? 環境はWindowsXPSP3とVB2005です。

  • PHPで配列に格納されたデータを表示させるには。

    PHPで配列に格納されたデータを表示させるには。 全ての配列の要素を表示させることは下のようにすればできるのはわかります。 <?php for($i=0;$i<sizeof($data);$i++){ echo $data[$i]; echo "<br>"; } ?> 配列の0~9まで(10個)をまず表示させて、「次へ」のようなリンクで次の10~19までを表示させるようにしたいのですが、どのようにすればよいのでしょうか。

    • ベストアンサー
    • PHP
  • 2次元配列

    課題で、氏名をローマ字で入力し、2次元配列に格納するプログラムを作成するというのがでました。条件として、氏名の長さは10文字以下、最大件数は10件。1エントリ入力ごとに累計件数を表示し、10件目の入力が完了するか、氏名の一文字目に'0'が入力されたら入力を終了しデータを表示する。11文字以上入力されたら、先頭から10文字までを有効とし、11文字目以降を無視する。 改行のみの入力の場合、エラーメッセージを表示し、再入力させる。 初心者の私には、データの表示と、条件の処理の仕方がわかりません。 下記プログラムを上記の条件を満たすようにするには、どこを直したらよいか教えてください。 お願いします。 #include <stdio.h> #include <string.h> #define BUFFERSIZE 1024 main() { char str[10][BUFFERSIZE]; char c; int count = 0; int i; int j; int l[10]; /*氏名の入力*/ for (i = 0; i < 10; i++) { printf("氏名人力 : "); while ( (c = getchar()) != '\n' ) { if( count < BUFFERSIZE - 1 ){ str[i][count++] = c; } } str[i][count] = '\0'; printf("累計 : %d \n", i+1); } for (i = 0; i < 10; i++) { for (j = 0; j < 10; j++) { printf("%c",str[i][j]); } putchar('\n'); } return 0; }

  • Accessクエリのデータ表示件数について

    テーブルにあるデータを、クエリにより抽出したのですが、テーブルにあるデータ/14328件の内、8414件しか抽出されません(日付フィールドの2000/10/1以降のデータのみ表示される)。クエリに日付等の抽出条件は設定していません。何かデータ表示件数制限等の設定があるのでしょうか?いろいろ試してみましたがダメでした。アドバイス宜しくお願いします。

  • 配列のSession格納、及び取得方法について

    お世話になります。 現在Visual Studio 2005でプログラム作成中です。 質問内容は、 配列(文字列を格納)をSessionに渡し、次ページでその配列の値を取得できるかという点です。 ***(a.aspx.vb)抜粋*** Dim a() As String Redim a(DataTable1.Rows.Count) For i As Integer 0 to DataTable1.Rows.Count - 1 a(i) = CType(DataTable1.Rows(i).Item(0)) Next Session("a.list") = a(DataTable1.Rows.Count) Session("a.count") = DataTable1.Rows.Count ***(b.aspx)抜粋*** Dim b() As String = CType(Session("a.list"), String) Dim bCount as integer = CType(Session("a.count"),Integer) Dim Name as String For i As Integer 0 To bCount Name = CType(b(i),String) Next としているのですが、取得できません。 配列に格納されたものをSessionに格納し、取得することは可能なのでしょうか。 また、その他に適切なものがあればご教授ください。 よろしくお願いいたします。

  • 配列の受け渡し

    こんばんは。 あるページで使用した配列を他のページでも使いたいのですが、 こういう配列を格納した変数の受け渡しって出来るのでしょうか? 普通の変数のデータを受け渡したかったら <input type="hidden" />で直接valueに変数の値を入れれば良いですが、 配列だと自分では以下のように愚直にやる方法しか分かりません。 もっとちゃんと渡せる方法ってあるのでしょうか? <?$a=array(1,2,3,4,5);?> <? for($i=0;$i<count($aaa);$i++){ ?> <input type="hidden" value="<?=$aaa[$i]?>" name="hoge[]"/> <?}?>

    • ベストアンサー
    • PHP
  • C# 配列の配列(多次元配列?)

    C#において、配列の配列中に格納した値を、検索することを 行いたいのですが、格納した値そのものを見ることができません。 まだ、C#を始めて間もないので、配列に格納する時点で、 不備があるかも知れませんが、お願いします。 やりたいこと ・テキストファイル内にある値を、2次元配列または、多次元配列に格納 ・配列に格納した値で、データチェックなどを行う予定  テキストファイル内のデータは、下記内容となり要素数も固定ではなく変動する   A=1,2,3・・・   B=11,22,33・・・ 実際のソースは、 //配列 ArrayList list = new ArrayList(); //配列格納 1レコード毎用 ArrayList listtmp = new ArrayList(); while ((strGenderTextLine = objReader.ReadLine()) != null) {  string strBuffer;  //「=」前の値格納用変数  string[] strBuffer2; //「=」後の値格納用配列  listtmp=null;  //strtmpに「=」前の値を格納  strtmp = TextLine.Split('=').GetValue(0).ToString();  //strtmp2に「=」後の値を格納(配列)  strtmp2 = TextLine.Split('=').GetValue(1).ToString().Split(',');  for (int i = 0; i <= strtmp2.Length - 1; i ++)  {   //[i,0]に、「=」前の値を代入   if (i == 0)   {   listtmp.Add(strtmp);   }   else   {   listtmp.Add(strtmp2[i].ToString());   }  }  //list配列にlistTmp配列を格納(配列の配列)  list.Add(listtmp);  intT = intT + strtmp2.Length;  //行数カウント  intTLine = intTLine + 1;  } ここから、配列「list」内に入っている値を閲覧することができる方法を教えていただければと思います。 宜しくお願いいたします。

  • データベースから取得したデータを配列に格納できません。

    jTableにSQL文の結果を表示させようとして結果を以下のように配列に 格納しようとしました。 public String[][] Serch(){ int i=0; String[][] rowData; String str = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=helloTable.mdb"; try { // ドライバクラスをロード Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); // データベースへ接続 Connection con = DriverManager.getConnection(str, "", ""); // ステートメントオブジェクトを生成 Statement stmt = con.createStatement(); String sql = "SELECT * FROM ハローテーブル"; ResultSet rs = stmt.executeQuery(sql); while(rs.next()){ // NOを取得 String no = String.valueOf(rs.getInt("NO")); // 言語を取得 String lang = rs.getString("言語"); // メッセージを取得 String msg = rs.getString("メッセージ"); rowData[i][0] = no; rowData[i][1] = lang; rowData[i][2] = msg; i++; } stmt.close(); con.close(); } catch (Exception e) { e.printStackTrace(); } return rowData; } このメソッドで得た配列を表示させようとすると以下の結果が表示されます。 java.lang.NullPointerException 正常なSQL文の結果は以下の通りです。 1 日本語 こんにちは世界 2 英語 Hello World 3 ドイツ語 Hallo Welt 配列の行数はSQL文の結果の行数に合わせたかったのですがうまくいきません。 どのように直せばSQL文の結果を配列にすべて格納できるでしょうか?

    • ベストアンサー
    • Java

専門家に質問してみよう