PHPで複数の色をランダムに表示する方法

このQ&Aのポイント
  • PHPを使用して、ある変数に登録されている複数の色をランダムに表示する方法について教えてください。
  • 具体的には、ある変数に登録されている複数の色をランダムに表示させたいのですが、どのようにすればよいのかわかりません。
  • rand関数を使用することはわかったのですが、変数に登録されている色をランダムに表示する方法について詳しく教えてください。
回答を見る
  • ベストアンサー

ランダムに表示

($title,$mail,$home,$color,$link) = split '<>',$file; foreach (split ',',$color) { print qq|<font color="$_">■</font>\n|; } 上記は先日教えていただいた方法で、$colorに登録されている複数の色を呼び出しているのですが、$colorの内容を全部表示させるのではなく、$colorに登録されている内容をランダムに表示させることも出来ればと考えています。 randを使うところまでは勉強したのですが、分割した$colorの内容をどのように使えばいいのか、素人知識ではさっぱりわかりません。 申し訳ございませんがよろしくお願いいたします。

  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

rand で生まれる乱数は小数点以下の端数も含まれるので、 整数化するために、int と併せて用いると良いでしょう。 my @colors = split ',', $color; print $colors[int(rand($#colors))]; このようにすれば、ランダムに選ばれたものが表示されるでしょう。 ここでは、@colors には5つの要素があるとします。 $#colors は、@colors の最後の添え字を表します。(添え字は 0 からなので、4) その数値(4)で rand してから int を行えば、0~4の間の整数値が返ります。 その値を添え字として利用して、@colors が要素を取り出しています。

MASTER-PPC
質問者

お礼

有難うございます。詳しく解説していただき勉強になりました。

関連するQ&A

  • 繰り返し表示

    ($title,$mail,$home,$color,$link) = split(/<>/, $file); $colorには、半角カンマで区切って「#eeeeee,#ffffff,#00ffff」等と登録されています。 以下の例と同じような感じで表示させたいのですが、ログから読み出す方法がわかりません。よろしくお願いいたします。 @color = ('#eeeeee','#ffffff','#00ffff'); foreach (@color) { print "<font color=\"$_\">■</font>\n"; }

    • ベストアンサー
    • Perl
  • CGIでホームページをランダムに表示したい

    下記のCGIをサーバーに乗せて、Y!とGoogleをランダムに表示したいのですが、もうちょっとというところでうまくいきません。 どなたか心優しい方修正していただけますか? よろしくおねがいします。 - - - - - - - - - - - - - - - #!/usr/bin/perl @page = ( "http://www.yahoo.co.jp", "http://www.google.co.jp/ig", ); $rand_num = int(rand(($#page+1)))+1; foreach(@page){ $i++; if($i == $rand_num) {$file = $_;} } print "content-type:text/html\n\n"; print <<"EOM"; <html lang="ja"><head> <meta http-equiv="content-type" content="text/html; charset=shift_jis"> <title>IFRAME</title> </head></html> EOM

    • ベストアンサー
    • CGI
  • ユーザ入力が表示されない原因を教えてください。

    CGI初心者です。基礎を勉強しただけなのでまだまだ理解が足りないせいかもしれません。現在データ検索のカスタマイズをしています。 ユーザが入力したものを検索条件の一部にと考えているのですが、なかなかできません。どこがいけないのかおしえていただけないでしょうか? インプット print "<P>● 業 務 <input type=text name=P2 size=30>\n"; アウトプット print "<td valign=top nowrap><font color=\"$t_color\">■</font> <B>業 務</B><br>\n"; print "<select name=P2 >\n"; print "<option value=\"99\" selected>指定なし\n"; $i =99; foreach $line (@lines) { ($name,$value) = split(/\,/,$line); chop; if ($name ne '') { $i++; $names{($name)[0]}++; $n++; } } foreach (keys %names) { print "<option value=\"$_\">[$_]\n"; } print "</select></td>\n"; と表記してます。クッキーを利用して反映できるようにはしていて、 入力したものを、登録内容の確認や、削除するときやメンテするときにはちゃんと表示されています。

  • ランダムに表示

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

    • ベストアンサー
    • Perl
  • ランダム文字列

    srand; @array = a .. z; @new; while ( @array ) { push( @new, splice(@array , rand @array , 1) ); } print @new, "\n\n"; print "<br>"; print @new, "\n\n"; print "<br>"; print @new, "\n\n"; ↑のような感じでランダム文字列の作成を考えています。 上記スクリプトですと、 aewpodigtusnkjycfxvmzqrlhb aewpodigtusnkjycfxvmzqrlhb aewpodigtusnkjycfxvmzqrlhb ↑のようにどの行も同一文字列になってしまいます。これを、行毎に異なった8文字のランダム文字列にしたいのですが、方法がわかりません。 いっぺんに100行のランダム文字列を生成する必要があります。どうぞよろしくお願いいたします。

    • ベストアンサー
    • Perl
  • ランダム表示について

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

    • 締切済み
    • PHP
  • サブルーチンの受け渡しについて

    以前からいろいろな質問をさせて貰い、 沢山の方に助けてもらったことをまず感謝いたします。 sub html1:{ &serch();#ファイル検索 print qq|Content-type: text/html\n\n|; print qq|<HTML><HEAD><TITLE>ファイル選択</TITLE></HEAD><BODY>\n|; print qq|<BODY text="#660000" bgcolor="#f0f0f0" link="#be7e7e" vlink="#c8c891" alink="#b3b3d9">\n|; print qq|<CENTER>\n|; print qq|<FORM action="edit.cgi" method="GET">|; print qq|<TABLE border="1" width="350" height="100">\n|; print qq|<TBODY>\n|; print qq|<TR>\n|; print qq|<TD colspan="4" height="85" align="center" valign="middle" width="300">|; print qq|<center>テキスト編集プログラム</center></TD>|; print qq|</TR>|; print qq|<TR>|; print qq|<TD colspan="4" align="center">ファイルを選択してください。<BR>|; print qq|<BR>|; print qq|<SELECT name="filename" size="1">|; foreach $file(@filelist){ print qq|<OPTION value="$file">$file</OPTION>\n|; } print qq|</SELECT><BR><BR>|; print qq|</TD></TR>|; print qq|<TR>|; print qq|<TD colspan="4" align="center"><INPUT type="submit" value="決定"></TD>|; print qq|</TR>|; print qq|</TBODY>|; print qq|</TABLE>|; print qq|</FORM>|; print qq|</CENTER>|; print qq|</BODY></HTML>\n|; サブルーチンの受け渡しが勉強が良くわからず、まだ勉強不足なので 申し訳ありませんがどうしたら良いのでしょうか? (ここから編集ルーチンにファイル名を送る手段) あとわかりやすい参考になるサイトなど御座いましたらよろしくお願いします。

    • ベストアンサー
    • Perl
  • セレクト表示方法について

    DBのトップ画面で選択画面の表示項目を1つだけ表示表示して矢印で開けるようにしたいのですが書き換え方がわかりません。 一応、表示部分の↓に書いて見ました sub html { # 表示開始 &header; print <<"EOM"; <table bgcolor="#B5B5B5" cellpadding=4 cellspacing=0 border=0 width="45"> <tr><td align="center"> <A HREF="$homepage" STYLE="text-decoration:none;color:black">戻る</A> </td></tr> </table> <center> <hr width="400" noshade> <font color="$t_color" size="$t_size" face="$t_face"><b>$title</b></font> <hr width="400" noshade> <P> <table><tr><td> $TopMessage </td></tr></table> <form method="POST" action="$script"> <input type=hidden name=mode value="search"> <table border=0 cellpadding=15><tr> EOM # 配列1 $size1 = @part1 + 1; print "<td valign=top><font color=\"$t_color\">■</font> <B>テス</B><br>\n"; print"<select name=P1 size=\"$size1\">\n"; print "<option value=\"99\" selected>指定なし\n"; foreach (0 .. $#part1) { print"<option value=\"$_\">$part1[$_]\n"; } print "</select></td>\n"; print "</tr></table>\n"; print "<font color=\"$t_color\">■</font> <b>キーワード</b> (任意)<br>\n";

    • 締切済み
    • CGI
  • ログファイル表示で全部表示されたりされなかったり…

    ログファイルをオープン、その中のユーザー名・パスワードと入力されたユーザー名・パスワードを比較して、どちらも一致した場合のみ表示するようなものを作成しました。 ただ単に表示を行うと一致するものすべて表示されるのですが、テーブルなどを使用して表示させると数が減って表示されるのです。 これはいったいなぜでしょうか? ---------- for ($i=0;$i<$gyou;$i++){ @atai = split(/&/,$log[$i]); foreach $atais(@atai){ ($keys, $values) = split(/=/, $atais); $FORMS{$keys}=$values; }#foreach if($FORM{'USER'} eq $FORMS{'USER'}){ if($FORM{'PASSWORD'} eq $FORMS{'PASSWORD'}){ print "$FORMS{'TITLE'}<BR>\n"; print "<BR>\n"; だと全件(19件入力中、一致は18件。18件すべて)表示 一番下を print "<TABLE>\n"; print "<TR><TD>$FORMS{'TITLE'}</TD></TR>\n"; print "</TABLE><BR>\n"; print "<BR>\n"; と変更すると13件しか表示されません。

    • ベストアンサー
    • CGI
  • CGIでリンクさせたページを同一のページ内の iframe に表示させるには

    CGIでリンクさせたページを同一のページ内の iframe に表示させるにはどうしたらいいでしょうか? ちなみにCGIは -------------------- #!/usr/bin/perl $querybuffer = $ENV{'QUERY_STRING'}; @pairs = split(/&/,$querybuffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); if( $name eq "jumpto" ) { $jumpto = $value; # 移動先 } } if( $jumpto ne "-" ) { print "Location: $jumpto\n\n"; } else { print "Content-type: text/html\n\n"; print qq|<HTML>\n<HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html ; charset=Shift_JIS">\n<TITLE>移動先が未指定です</TITLE></HEAD>\n|; print qq|<BODY><H1>移動先が選択されていません。</H1><P>移動先を選択してからボタンをクリックして下さい。</P></BODY>\n|; } exit; ------------------ です。 iframe部分は以下のようにしています。 <iframe src="index.html" height=200 width=460> この部分は iframe 対応のブラウザで見てください。 </iframe>

    • ベストアンサー
    • CGI

専門家に質問してみよう