あるランダムスクリプトを改造して
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回ループを繰り返すと別ページに表示させて行きたいのですが、どういった方法があるでしょうか?
詳しい方いらっしゃいましたら、よろしくお願いします。
思いついたコーディングの方針を書いてみます。
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] ]
を表する。
※クッキーやセッションが使える場合は、それをつかう方法もあります。