• 締切済み

ランダム表示について

ランダム表示について煮詰まってしまって 何とか改善したく思い書き込ませていただきました。 --------------------------------- 表示結果 --------------------------------- データ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; } ?> --------------------------------- 毎ループ、総データ数から一つランダムで選ぶ処理になっているのが原因だと思うのですが その部分を改善しようと調べては試しての繰り返しをしているのですが 一向に改善しません。。。。 どなたかアドバイスを頂ければと思います。 宜しくお願い致します。

みんなの回答

  • mpx
  • ベストアンサー率71% (149/209)
回答No.3

ANo.1 の続き >>「eof;」前だと一緒に表示されうまく稼動しませんでしたが >>「eof;」の後に入れたら被る事はなくなりました。 申し訳有りません。勘違いの回答をしてしまいました。 配列の最後の値を$rand番目の配列に移して、array_popしながら 減らさないとダメですね。 ただ、ANo.2でhrm_mmmさんが回答している方法が簡便で確実です。 配列内をシャッフルできるので、順に配列から取り出すだけで 乱数で取り出すのと同じ効果が得られます。

全文を見る
すると、全ての回答が全文表示されます。
  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

shuffle ( &$line ); // php5 なら &は不要

全文を見る
すると、全ての回答が全文表示されます。
  • mpx
  • ベストアンサー率71% (149/209)
回答No.1

以下のように「eof;」の前に unsetを追加してみたら如何でしょうか? データ2{$line[$rand][1]}<br><br> unset($line[$rand]);  //ここを追加 eof;

maxves
質問者

お礼

アドバイスありがとう御座います。 「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); } 空白なら再度ランダムで選ぶみたいな感じの指示を出したら改善できるのでは と思い試してみたのですが改善できませんでした。。。。 なにかよい方法がないでしょうか。。。。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • array_randを使って複数表示

    複数の商品をランダムで表示させたいと思っています。 過去の質問で近い記事があったのですが単体商品のランダムだったので この記事を参考に複数表示できないでしょうか? 過去記事 http://oshiete1.goo.ne.jp/qa3181922.html 参考ソース ------------------------------------------------------------ <?php $handle = fopen("test.csv", "r"); while (($data= fgetcsv($handle, 1000, ",")) !== FALSE) { $datas[]= $data; } fclose($handle);//ここまででデータを読む $row= rand(0,count($datas)-1);//ランダムに一つ選ぶ print <<<eof 商品名:{$datas[$row][1]}<br> 説明:{$datas[$row][2]}<br> eof; //商品名と説明を表示 } ?> ------------------------------------------------------------ 理想的な表示結果としては ------------------------------------------------------------ ・たまねぎ ・値段 ・在庫数 ・きゃべつ ・値段 ・在庫数 ・れもん ・値段 ・在庫数 ------------------------------------------------------------ ↓ ------------------------------------------------------------ ・れたす ・値段 ・在庫数 ・れもん ・値段 ・在庫数 ・たまねぎ ・値段 ・在庫数 ------------------------------------------------------------ 誠にすいませんが、詳しく教えていただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • 限られた数の配列のみ表示させる

    配列の基本的なことを理解していないので、極めて初歩的な質問で申し訳ありませんが、ご教示お願い致します。 csvを読み込み、条件を満たすデータ(ここでは$row[1]がy)だけで配列を作ります。 $handle = fopen("sample.csv", "r"); while (($row = fgetcsv($handle, 1000, ",")) !== FALSE) {if($row[1]=="y"){ $data[] = array( $row[0] ,$row[1] ,$row[2] ,$row[3]); } } fclose($handle); すべての行のデータ(ここでは$row[2]のみ)は下記で表示されます。 foreach ($data as $key => $row) { print $row[2]."<BR>"."\n"; 最初から例えば4行目までのみ表示したい場合 for($i=0;$i<4;$i++){ print $data[$i]."<BR>"."\n"; } 上記では、arreyの文字が4個しか表示されませんが、先の例のように各行の$row[2]を表示させるには、どのようにすればよいのでしょうか。 宜しくお願いします。

    • 締切済み
    • PHP
  • ランダム表示文字について

    if ( open( IN,"hoge.txt" ) ) {   @line = <IN>;   close( IN ); } else {   exit; } $random1 = @line[rand(@line)]; $random2 = @line[rand(@line)]; $randam3 = @line[rand(@line)]; テキストファイルから1行文字をランダムに表示するプログラムを書き実行できたのですが、このままだとrandom1,2,3の変数に同じものが入ってしまう可能性があります。 これで全て違うものが入るようなプログラムを書きたいのですが、そのようなことは可能でしょうか?

    • ベストアンサー
    • CGI
  • CSVファイルを読み込み表示すると行頭がおかしくなります

    ・CSVファイルを読み込み表示すると行頭がおかしくなります。 -【 CSVファイル(test.csv) 】------------------- 1,単一,必須 2,…,… ----------------------------------------- ・例えば上記のCSVを読み込んで、  PHPで表示すると以下のように表示されます。 -【 ブラウザ表示 】-------------------------- 1 P一 K須 2 … ----------------------------------------- ・というように最初の文字が正常に表示されません。 ・ちなみに数字(半角?)はちゃんと表示されました。 ・プログラムは下のような感じになります。 ・どこを編集すればよいでしょうか? -【 PHP 】--------------------------------- <?php  if( $fp = fopen( 'test.csv', 'r' ) ){   $data = fgetcsv( $fp );   while( ( $data = fgetcsv( $fp ) ) !== FALSE ){    echo $data[0] . ' ' . $data[1] . ' ' . $data[2] . '<BR>';   }  } ?> ----------------------------------------- -【 仕様 】--------------------------------- [OS]: CentOS5 [Server]: Apache_2.2.10 [PHP]: PHP_5.2.6 -----------------------------------------

    • ベストアンサー
    • PHP
  • ?をつけて送信してもだめでしょうか

    ちゃんと表示されるのは これを実行したときで <?php $handle = fopen("jikken.csv", "r"); while (($data = fgetcsv($handle,1000, ",")) !== FALSE) { $num = count($data); if($data[0] == 9999999){ echo $data[1]."<br>\n"; } } fclose($handle); ?> しかし <?php $codex = $_POST['code']; $handle = fopen("jikken.csv", "r"); while (($data = fgetcsv($handle,1000, ",")) !== FALSE) { $num = count($data); if($data[0] == $codex){ echo $data[1]."<br>\n"; } } fclose($handle); ?> このように入れて ~~.php?code=9999999 としても うまくいかないのです 何がおかしいのでしょうか

    • 締切済み
    • PHP
  • phpでの画像ランダム表示方法

    リロードする度に違う画像を表示させたいのですが なかなかうまくいかないのでお力を貸してください! ・boxaには5枚の中から1枚をランダム表示させる ・boxbには10枚の中から3枚をランダム表示させる(重複させないで表示) -----index.php----- <div class="boxa"> <?php require("test.php"); ?> </div> <div class="boxb"> <?php require("test2.php"); ?> <br /> <?php require("test2.php"); ?> <br /> <?php require("test2.php"); ?> </div> -----test.php(http://php.eweb-design.com/0203_rt.phpさんのサンプルソースです)----- <?php $hit[0] = 1; $rtxt[0] = '<a href="http://hogehoge.com"><img src="http://hogehoge.com/image1.gif" alt="バナー1" width="500" height="200" /></a>'; ~~省略~~ $hit[4] = 1; $rtxt[4] = '<a href="http://hogehoge.com"><img src="http://hogehoge.com/image4.gif" alt="バナー5" width="500" height="200" /></a>'; $length = count($hit) - 1; for($i=0; $i<=$length; $i++) { $m += $hit[$i]; } srand( (double)microtime()*1000000 ); $n = round(rand(1,$m) ); for($i=0; $i<=$length; $i++) { $x = $y; $y += $hit[$i]; if($x<$n && $n<=$y) $ad = $rtxt[$i]; } print("$ad"); ?> -----test2.php----- <?php $hit[0] = 1; $rtxt[0] = '<a href="http://hogehoge.com"><img src="http://hogehoge.com/image6.gif" alt="バナー1" width="200" height="200" /></a>'; ~~省略~~ $hit[9] = 1; $rtxt[9] = '<a href="http://hogehoge.com"><img src="http://hogehoge.com/image15.gif" alt="バナー10" width="200" height="200" /></a>'; $length = count($hit) - 1; for($i=0; $i<=$length; $i++) { $m += $hit[$i]; } srand( (double)microtime()*1000000 ); $n = round(rand(1,$m) ); for($i=0; $i<=$length; $i++) { $x = $y; $y += $hit[$i]; if($x<$n && $n<=$y) $ad = $rtxt[$i]; } print("$ad"); ?> boxaにはtest.phpで指定した画像がランダム表示されるのですが boxbにはtest.phpとtest2.phpで指定した画像が出てしまい重複表示されてしまいます。 boxbにはtest2.phpで指定した画像のみを重複しないでランダム表示 させたいのですがどのようにしたらよいのでしょうか?

    • ベストアンサー
    • PHP
  • テキストをランダムで表示するには?

    PHP初心者です。教えて下さいm(__)m (例) $data[0] = '晴れ; $data[1] = '雨';   :   : があり、(本当はもっと長い文章で変更の可能性もあるような文章です) <A href="data.php">お天気</A> を選択すると $data[0] = '晴れ; $data[0] = '雨';    :    : の中からランダムに表示させたいと思っています。 <? $data[0] = '晴れ; $data[0] = '雨';    : $length = count($data) - 1; srand( (double)microtime()*1000000 ); $num=round( rand(0,$length) ); print("$data[$num]"); ?> でうまく表示されたのですが、データがあまりにもいっぱいある為、ファイルがいっぱいになってしまいます。 もっと簡単に出来るようにしたいのですが、いい方法ありませんか? データがいっぱいあるというのは、 同じようにランダムに表示させたいものが複数あり、$dataの名前をそれぞれ変えて、 $dataならこのファイルから$testならこのファイルから文章を取得するといった感じです。 一つ一つに上のようなソースを書くと手間がかかるのですが、もっと簡単に出来る方法がありませんか? 文章下手なので、うまく説明でききていないと思うのですが・・・宜しくお願い致します。

    • ベストアンサー
    • PHP
  • 外部参照のランダムリンクについて

    はじめまして、初めて投稿させていただきます。 プログラムの素人ですが、HPを作成しようとしています。 ある、HPのソースを見ると <a href="http://AAAA/v_rand.php">ああああ</a><BR> <a href="http://AAAA/v_rand.php">いいいい</a><BR> ・ ・ と、phpのファイルを外部参照させいるのを見つけました。 そして、ある1つのリンクを、クリック(更新)するごとに表示される ページが違います。(ランダムに表示されます) これは、どのように作られているのでしょうか。お分かりの方 教えていただけないでしょうか。

    • 締切済み
    • PHP
  • CSVファイルの読み込みで日本語が出力されない!

    PHPを使ってCSVファイルを部分的に読み込むコードを教えてもらいました。 しかし、CSVに入力している英語と数字は出力されるのに、日本語は空白のままでした。 教えてもらったコードは次の通りですですが、日本語も出力する場合、どうしたら良いのでしょうか? <?php function h( $str ) { return htmlentities( $str, ENT_QUOTES, 'UTF-8' ); } ?> <? if (($handle = fopen("test.csv", "r")) !== FALSE) : ?> <table class="table1" width="100%" cellspacing="0" cellpadding="0" border="0"> <tr> <? $i = 0; ?> <? while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) : $i ++ ?> <td><?=h($data[0])?><img src="http://1-<?=h($i)?>.gif"><br><?=h($data[1])?><br><?=h($data[2])?><br><span class="red"><?=h($data[3])?>円</span></td> <? endwhile; ?> </tr> </table> <? fclose($handle); ?> <? endif; ?>

    • ベストアンサー
    • PHP
  • phpでcsvデータをランダム表示について

    下記はcsvデータをランダムに1つだけ抽出するphpのプログラムですが、1度表示したデータに色をつけるとか、表示させない方法はありますか? <!doctype html> <html> <head> <meta charset="UTF-8"> <title>無題ドキュメント</title> </head> <body> <?php // 抽出数 $count = 1; $list = array(); // 読み込みCSVファイル $lines = file('test.csv'); shuffle($lines); foreach ($lines as $line) { if ( ! in_array($line, $list)) { array_push($list, $line); if (count($list) >= $count) { break; } } } // CSVファイルに出力 $file = fopen('test2.csv', 'w'); foreach ($list as $l) { echo $l.'<br>'; if ($file) { fputs($file, $l); } } fclose($file); ?> </body> </html>

    • ベストアンサー
    • PHP