人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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回ループを繰り返すと別ページに表示させて行きたいのですが、どういった方法があるでしょうか?
詳しい方いらっしゃいましたら、よろしくお願いします。

●質問者: praide
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:as CSV PHP trim シャッフル
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● nandedarou
●30ポイント

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


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

◎質問者からの返答

ありがとうございます。

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

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


2 ● takuchan_no2
●20ポイント

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

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

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

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

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

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

◎質問者からの返答

ありがとうございます。

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

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


3 ● tobeoscontinue
●30ポイント

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ファイルから設定するコードにする必要があります。


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

◎質問者からの返答

ありがとうございます。

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ