• ベストアンサー

ランダムでかぶらないように4つを表示。

データベースらしきものを改造中です。 データベースのレコードのうち、ランダムに選んだ4つの情報をトップページに表示したいです。 この「ランダムに選びつつかぶらない方法」と言うのが出来ません。 どのようにしたら実現できますか? よろしくお願いします。

  • Perl
  • 回答数3
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • g_p_
  • ベストアンサー率53% (28/52)
回答No.2

こんにちは、 >データベースらしきものを改造中です。 これがどんな物なのか分かりませんが。 以下の様な感じでどうでしょう? #! /usr/bin/perl use strict; use warnings; my %selected_data_of = (); while ( scalar keys %selected_data_of < 4 ) {   my ( $id , $data ) = &get_rand_data();   $selected_data_of{$id} = $data; } foreach my $id ( keys %selected_data_of ) {   print qq($id = $selected_data_of{$id}\n); } sub get_rand_data {   my $id = int rand(10);   my $data = qq(data of $id);   return ( $id , $data ); } ハッシュのキーはユニークなので、 データベースらしきものから取得したIDをハッシュのキー、 表示したいデータを値としてハッシュに格納して、 ハッシュのキーの数が4つになったら終わり。 ランダムなデータを取得するサブルーチンはスクリプトを動かす為の 意味の無い内容ですから、ご自分の環境で作って下さい。 あと、無限ループにならない対策はご自分でお願いします。

その他の回答 (2)

  • W_H
  • ベストアンサー率47% (21/44)
回答No.3

単純に@aの中身を三つ取り出すサンプルプログラムを書きました。@outに出力結果が入ります。 @a=(1,2,3,4,5); #設定 $limit=3;#取り出す数 $err="_";#エラーの印 @out=(); #実行 --$limit;#数字調整 if($#a>$limit){#データ数判定 for(;$#out<$limit;){ do{ $r=int(rand()*($#a+1)); }while($a[$r] eq $err); push(@out,$a[$r]); $a[$r]=$err; } }else{@out=@a;} print @out; 基本的考え方は、乱数を発生させ、配列のデータを読み込み、@outに入れるのですが、その際にデータをエラーの印($errの中身である[_]のこと。空白にするのもあり。)に上書きし、次回からは配列のデータがエラーの印なら、再度乱数を発生させます。 一度使用した配列のデータを使えなくするというのも、ひとつの手ですね。 一応、saru_1234さんの言う前出と同じならやり直し、を楽に形にしたものだと思ってください。 ちなみに、$#配列名=配列の数です。ただし、配列での数え方のため、中身が五つの場合、数は四つとなります。(零から数えるから。) ついでに、無限ループの回避は簡単にしているつもりですが、危ないかもしれないで、さらに突っ込んだ回避はがんばってください。たぶん通常なら大丈夫ですが。

  • saru_1234
  • ベストアンサー率33% (452/1341)
回答No.1

2番目以降の選択の時に、 「前出のと同じだったら選択しなおし」とすればよいのでは?

master-3rd
質問者

補足

返答ありがとうございます。 >「前出のと同じだったら選択しなおし」 これはどのようにしたら良いのでしょうか?

関連するQ&A

  • htmlのランダム表示について

    楽天やヤフーのトップページにいくと、 閲覧する度に違うhtmlファイル(特集部分)が表示されると思います。 自分で運営しているサイトにも、 このランダム表示を利用したいと思っているのですが、 どのようにすればよろしいでしょうか? 尚、現状知ってるのはhtmlやcss、cgi設置くらいです。 画像だけをランダム表示するのは調べてわかったのですが、 htmlファイルそのものをランダム表示するやり方がわからなかったので、 よろしくお願いいたします。

  • トップページをランダムに表示するには?

    画像やメッセージなどを表示毎にランダムで変更するなどの方法はよくありますが、例えば index1.html index2.html とう2種類のトップページがあり、この2つを ランダムでどちらか表示させるということをするには どのようにすればいいでしょうか? よろしくお願いします。

  • 画像ランダム表示、しかしダブらないように…

    トップページの画像をランダム表示させたいです。 1枚だけならどこかでソースが載っていたのでそれをコピーしたらいいだけだと思うので問題はないのですが、3枚をランダム表示させ、なおかつ同じ物が表示しないようにしたいのです。 もちろん、画像保存フォルダは1つです。また、ファイルは順次増やして行きたいです。 1枚目の画像が決定した後、それ以外の画像からランダムに選択。さらに1枚目・2枚目の画像が決定したらそれ以外の画像からランダムに選択。 こんな事が出来ますか? また、どうしたらいいのでしょうか? よろしくお願いします。

  • ホームページの一部の表示をランダムに。

    ホームページの中の 一部分にアイフレームを 使って、その中に 3つのページをランダムに表示させたい と考えております。 調べたのですが、画像をランダムに 表示をする方法は、見つけられるのですが アイフレームを使って、その中に ページをランダムに表示させる 方法を見つける事ができませんでした。 お分かりになる方 よろしくお願いします。

  • ランダム表示

    こんばんは。 現在、インラインフレーム内にページをランダム表示させています。 今は親ページを更新すると子ページも同時に更新される状況なの ですが、今回、子ページを日付が変わるごと(もしくは数時間ごと)の ランダム表示に変更したいと思っています。「今日の○○」のような感じで…。 このような事は可能でしょうか? 宜しくお願いいたします

  • アクセスするたびに、表示されるメッセージがランダムに変わる・・・・・・・

      たまにそんなページを見かけますが、ランダムに表示されるメッセージの 中から特定のメッセージだけを見たい場合、何かいい方法はないのでしょうか。  私はいつも、そういうページに行ったとき、見たいメッセージが表示 されるまでブラウザーの「更新」ボタンを押しまくっています・・・・・  これは、その一例です。このトップページの、左側中程のセリフでがそれです。  http://www.horisusumu.com/

  • ランダムに表示

    while(my($key,$val) = each %PL){ @VS_VALUES = split(/\s/,$val); print $VS_VALUES[5]; } あるPerlゲームの改造を行っています。 $VS_VALUES[5]の表示順をランダムにしたいと考えていますが、自力では難しそうです。よくわからないのですが、%PLの配列をランダムにするのでしょうか?書き方をお教えいただければ大変助かります。お手数ですが、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • VBWDでデータベースをランダム表示できずに困っています

    課題研究でVisual Basic Web Developer 2008 ExpressとサーバにIISとDBにAccessを用いて、Webアプリケーションの開発を行っているのですが行き詰ってしまったためご助力お願いいたします。 開発環境 OS:XP Pro SP3  CPU:2.8Ghz メモリ:500MB タイトルのとおりデータベースの内容をランダムで表示したいのですが、うまくいきません。 現状はGridViewを用いてAccessのデータベースの内容を表示すること、そしてSQL文にOrder by Rnd(データ数)を入れてランダムに並び替えることまで出来ているのですが、これではWebページ上で更新をしてもデータベースが更新されないため? ランダムに並び替えが行われません。 VBのことをあまり理解しないまま、VBWDのデザインでのWebページ作成が楽ということで進めて来てしまったため、こういった場合aspx.vbにコードを書けばよいのか、SQL文を変えるべきなのかも理解できていません。 お時間ございましたら、ご教授願います。

  • ランダムでテキストを表示

    ボタンをクリックしたらランダムでテキスト(一行のもの)を表示、これを複数設置したいです。 一つのみならぐぐればすぐでてきますが、同じページに複数設置する方法がわかりません。 できればテキストは別タブに表示ではなく、同じページのテキストボックスに表示されるものがいいです。 教えてください。

  • HTML内でのPHPスクリプト実行

    いつもお世話になります。 PHP + MySQL でデータベースを構築しました。 今回、トップページ(index.html)にそのデータベースの情報のうちの一つを 自動でかつランダムに取り出してきて表示させたいと思い、 index.html にアクセスした際に JavaScript で自動で新しいウィンドウを開き、 そこでランダム取得用の PHP スクリプトを実行、 ランダムに取得した情報を新しく開いたウィンドウに表示するところまで出来ました。 しかし、アクセスするたびに新しいウィンドウが開いてしまう為、 index.html と ランダム表示処理を一つにまとめることは出来ないかと思っています。 質問1. そもそも index.html 内に PHPスクリプトを埋め込むということは出来ないのでしょうか? 質問2. index.html を表示したら、すぐにメタタグや JavaScript で index.php(トップページ表示+ランダム表示処理)などに リダイレクトすれば実現可能とは思いますが、SEO 的に心配です。 この場合、検索エンジンからどの程度のペナルティを食らうのでしょうか? また、それは元に戻せばペナルティ解除されるのでしょうか? どなたかお分かりの方がおられましたら、ご教授下さい。 よろしくお願い致します。

専門家に質問してみよう