- 締切済み
ランダム表示について
ランダム表示について煮詰まってしまって 何とか改善したく思い書き込ませていただきました。 --------------------------------- 表示結果 --------------------------------- データ1 test02 データ2 sample02 データ1 test01 データ2 sample01 データ1 test05 データ2 sample05 データ1 test02 データ2 sample02 --------------------------------- 表示結果がどうしても被ってしまって これを何とか被らないようにしたく 色々模索したのですが解決策が見つかりません。 csvの中身とソースは下記となります。 test.csv --------------------------------- test01 sample01 test02 sample02 test03 sample03 test04 sample04 test05 sample05 test06 sample06 test07 sample07 --------------------------------- ソース --------------------------------- <?php $handle = fopen("test.csv", "r"); while (($data= fgetcsv($handle, 1000, ",")) !== FALSE) { $line[]= $data; } fclose($handle); for($i=0;$i<5;$i++){ $rand= rand(0,count($line)-1); print <<<eof データ1{$line[$rand][0]}<br> データ2{$line[$rand][1]}<br><br> eof; } ?> --------------------------------- 毎ループ、総データ数から一つランダムで選ぶ処理になっているのが原因だと思うのですが その部分を改善しようと調べては試しての繰り返しをしているのですが 一向に改善しません。。。。 どなたかアドバイスを頂ければと思います。 宜しくお願い致します。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- mpx
- ベストアンサー率71% (149/209)
ANo.1 の続き >>「eof;」前だと一緒に表示されうまく稼動しませんでしたが >>「eof;」の後に入れたら被る事はなくなりました。 申し訳有りません。勘違いの回答をしてしまいました。 配列の最後の値を$rand番目の配列に移して、array_popしながら 減らさないとダメですね。 ただ、ANo.2でhrm_mmmさんが回答している方法が簡便で確実です。 配列内をシャッフルできるので、順に配列から取り出すだけで 乱数で取り出すのと同じ効果が得られます。
お礼
アドバイスありがとう御座います。 「eof;」前だと一緒に表示されうまく稼動しませんでしたが 「eof;」の後に入れたら被る事はなくなりました。 被らなくなったのは理想的だったんですが・・・ 今度は空白状態になってしまいました。 実行結果 --------------------------------- データ1test02 データ2sample02 データ1test08 データ2sample08 データ1test03 データ2sample03 データ1 データ2 データ1test04 データ2sample04 --------------------------------- 単純に考えて「$rand= rand(0,count($line)-1);」の後に while( $rand == "" ){ $rand= rand(0,count($line)-1); } 空白なら再度ランダムで選ぶみたいな感じの指示を出したら改善できるのでは と思い試してみたのですが改善できませんでした。。。。 なにかよい方法がないでしょうか。。。。