PHPを勉強中です。

あるランダムスクリプトを改造して
CSVファイルから一定のデータをページに表示させてランダム表示させようと考えています。
<?php
$i=0;
$input = file("*****.csv");
foreach($input as $value){
$value=trim($value);
list($a,$b,$c,$d,$e,$f,)=split(',',$value);
$array_text_Banner[]=array('a'=>$a,'b'=>$b,'c'=>$c,'d'=>$d,'e'=>$e,'f'=>$f);
}

//シャッフル
shuffle($array_text_Banner);
//ループ回数の指定
while($i<10){
if(isset($array_text_Banner[$i])){
$array_pBanner[$i]=$array_text_Banner[$i];
}
$i++;
}
//以下出力省略。
*******************************************
?>
whileで10回ループを繰り返すと別ページに表示させて行きたいのですが、どういった方法があるでしょうか?
詳しい方いらっしゃいましたら、よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/03/08 17:07:47
  • 終了:2007/03/12 14:40:49

回答(3件)

id:nandedarou No.1

nandedarou回答回数230ベストアンサー獲得回数342007/03/08 19:39:31

ポイント30pt

思いついたコーディングの方針を書いてみます。


1.

ファイルのデータを直接シャッフルせずに、行番号(データ番号)を配列$input_keysに入れてシャッフルし、そのシャッフルされた行番号の順番でデータを取り出すというコーディングにする。

$input = file("*****.csv");

$input_keys = range(0,count($input)-1 );

shuffle($input_keys);

例えば、データが5行のとき、$input_keysは、2,4,1,3,0などとなっている。


2.

$input_keysの値の順番に$inputからデータを10個取り出す。

例えば、1つ目に表示するデータは、

$input[ $input_keys[0] ]

例えば、5つ目に表示するデータは、

$input[ $input_keys[4] ]


3。

問題は、どうやって次のページに$input_keysの内容を引き継ぐかです。

簡単なのは、$input_keysの内容をimplode関数で文字列にして、inputタグのhidden属性で出力すれば、$_POSTで受け取れます。次に表示するページ番号もinputタグのhidden属性で出力する必要があるでしょう。$_POSTで受け取ったinput_keysをsplit関数でもとに戻し、受け取ったページ番号に基づいて、データを10個表示すればいいでしょう。

例えば、ページ番号が2のときは、

$input[ $input_keys[10] ]

から

$input[ $input_keys[19] ]

を表する。

※クッキーやセッションが使える場合は、それをつかう方法もあります。


http://q.hatena.ne.jp/answer

id:praide

ありがとうございます。

まだ勉強が足りないようです…

もう少し勉強して出直します。

2007/03/12 14:39:46
id:takuchan_no2 No.2

takuchan_no2回答回数87ベストアンサー獲得回数32007/03/09 04:45:02

ポイント20pt

サーバのPHPがSafe-modeに設定されていないのであれば、LocationのHTTPヘッダを渡すという手があります。

例としてはこんな感じです。

header("Location: http://exmaple.com/");

注意点して欲しいのは、URIには絶対パスを指定することです。

最近のブラウザは賢いので、相対パスでも飛んでくれるはずですが、、、

その他の方法では、HTMLのheadにmetaとしてLocationを記述するか、JavaScriptで飛ばすという方法もあります。

id:praide

ありがとうございます。

まだ勉強が足りないようです…

もう少し勉強して出直します。

2007/03/12 14:39:55
id:tobeoscontinue No.3

tobeoscontinue回答回数214ベストアンサー獲得回数542007/03/10 23:30:58

ポイント30pt

http://jp2.php.net/manual/ja/ref.session.php

セッションを使ってみてはどうでしょう。

session_start();
if (!isset($_SESSION['Banner']) || empty($_SESSION['Banner'])) {
  $banner = array(1,2,3,4,5,6,7,8,9,10);
  shuffle($banner);
  $_SESSION['Banner'] = $banner;
}
$banner = array_shift($_SESSION['Banner']);
echo $banner."<br>";

制御変数でもいいのですがarray_shift()を使っています。

空(empty)になったら別ページを表示させる部分を追加する必要があります。

このコードでは空になったら再度shuffle()からやり直しています。

$bannerは単純化しているので実際のcvsファイルから設定するコードにする必要があります。


ランダムと判断する時間間隔がデフォルトのセッション有効時間と合わないなどいろいろな調整が必要になるとは思いますが。

id:praide

ありがとうございます。

まだ勉強が足りないようです…

もう少し勉強して出直します。

2007/03/12 14:39:58

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません