• ベストアンサー

1~100の数字の9の倍数だけ同じ文字、他はランダム

教えてくださいm(__)m タイトルの通り、0~100の数字の9の倍数だけ同じ文字、他はランダムになるようにするにはどうやって組み立てたらいいのでしょうか? 0~100の数字のうち、9、18、27、36、45、54、63、72、81、90、99だけ同じ文字(例えばA)が表示されるようにしたいのです。でも更新するたび、ランダムに文字(例えばB)が変わります。 その数字は適当な文字(9の倍数以外の文字)がランダムに表示されます。 http://search.net-newbie.com/php/function.array-rand.html ↑のように「array_rand」を使えばいいと思うのですが・・よくわからず・・・(>0<) どういう風にプログラムを書いたらいいのでしょうか。 分かる方いましたら、お願いしますm(__)m

  • yuena
  • お礼率34% (51/146)
  • PHP
  • 回答数8
  • ありがとう数4

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

  • ベストアンサー
  • TMEspion
  • ベストアンサー率27% (5/18)
回答No.8

TMEspionと申します。 質問者さんのコメントから察するにNo.4さんのコメントが一番要望に近いようなので、失礼かもしれませんが、No.4さんのソースを少し手直ししてみました。 //表示する文字 $array = array("A","B","C","D","E","F","G","H"); //表示する文字の個数 $count = count($array); //★1から8ではなく0から7にすべきかと?(空欄の出る原因?) $count = $count-1; //9の時に表示する文字の番号 //★常に同じものを表示するならこれでも良いのでは? $var9 = "Z"; //0~100まで繰り返す for ($i=0 ; $i<100 ; $i++){ //$iが9の倍数の時に処理する。 if(floor($i/9) == ($i/9) && $i != 0){ //9の倍数の時に入る文字を入れる $moji = $var9; //$iが9の倍数以外の場合 }else{ //ランダムで表示する文字の番号 $var = rand(0,$count); //もし9の倍数の時に入る文字とランダムで表示する文字の番号が同じ時のみループ while ($var == $var9) { //ランダムで表示する文字の番号 $var = rand(0,$count); } //文字を入れる $moji = $array[$var]; } //文字を出力する。 echo $i.":".$moji."<BR>"; } こんな感じで要望通りに動きませんかね?

その他の回答 (7)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.7

こんな感じでよいのでは? <?PHP for ($i=0;$i<=99;$i++){ $a[$i]=($i>9 and $i%9==0)?$a[9]:chr(mt_rand(65,90)); } foreach ($a as $key=>$val){ print $key.":".$val."<br>"; } ?>

回答No.6

回答No.5 余計に書きすぎでした。訂正します。 <?php function ascii($random=0){ for ( $i=0x41; $i<=0x5a; $i++ ) { $char[] = chr($i); } $random = mt_rand(0, 25); return $char[$random]; } //9の倍数:固定 $baisu = ascii(); for($i=1; $i<=100; $i++){ if($i%9==0){ echo "$i : $baisu\n"; } else{ echo "$i : ".ascii()."\n"; } } ?>

回答No.5

使用文字の指定を独自に設定しています。 この仕様で要望にかなっているかどうか?? <?php /*[0-9],[a-z].[A-Z]の62文字(追加又は削除したい文字があればASCIIコード表を参考にして編集下さい)を配列に入れてランダム関数から取得 */ function ascii(){ for ( $i=0x30; $i<=0x39; $i++ ) { $char[] = chr($i); } for ( $i=0x41; $i<=0x5a; $i++ ) { $char[] = chr($i); } for ( $i=0x61; $i<=0x7a; $i++ ) { $char[] = chr($i); } $random = mt_rand(0, 61); echo $char[$random]; } function ascii2($num){ for ( $i=0x30; $i<=0x39; $i++ ) { $char[] = chr($i); } for ( $i=0x41; $i<=0x5a; $i++ ) { $char[] = chr($i); } for ( $i=0x61; $i<=0x7a; $i++ ) { $char[] = chr($i); } $random = mt_rand(0, 61); return $char[$random]; } //9の倍数の表示  $baisu = ascii2(1); for($i=1; $i<=100; $i++){ if($i%9==0){ echo "$baisu\n"; } else{ ascii(); } } ?>

yuena
質問者

お礼

お返事ありがとうございます!!!! ↑の回答はNO4の方へのものでした。間違えてしまい申し訳ありません(><) 教えていただいたものを試しましたが、 keBFDTWaN oLUnDLFqN ZMZ9n4PzN 9bWRPwt4N CjOhllFON kmR16vzrN 2UeRxSLRN koUV7AqsN dHtpI3CiN tah2QUoEN L3cTmQTxN E という表示になってしまいました。。 数字:ローマ字の大文字  という表示にさせたいので、ちょっといじってみますね! ありがとうございましたm(__)m

yuena
質問者

補足

お返事ありがとうございます!行き違いになっていたようですね^^ 私の書き方が曖昧だったのですが、0~99までの数字でしたので、 //0~99まで繰り返す に変更して行ってみました。 0:G 1:E 2: 3:C 4: 5:H 6:B 7:B 8:A 9:G 10:C 11:D 12:E 13:F 14:D 15:H 16:B 17:E 18:G 19:F 20:C 21:C 22: 23:C 24:E 25:A 26:D 27:G 28:A 29:C 30:B 31:H 32:B 33:A 34: 35:B 36:G 37:H 38:A 39:E 40:B 41: 42:H 43:B 44:H 45:G 46: 47:F 48:D 49:B 50:C 51:B 52:D 53:C 54:G 55:E 56:H 57:C 58:H 59: 60:E 61:A 62:C 63:G 64:B 65:A 66:B 67: 68: 69:B 70:E 71:B 72:G 73: 74:E 75: 76:A 77:C 78:H 79:A 80: 81:G 82:H 83:E 84:B 85:C 86:D 87:E 88:B 89:C 90:G 91:A 92:B 93: 94:C 95:D 96:D 97:E 98:C 99:G 更新を押すとランダムに変更しております!! 気になるのは・・・空欄が出来るのは何故なのでしょうか・・・(><)

  • tacfore
  • ベストアンサー率45% (5/11)
回答No.4

No.3ですが、ちょっと読み間違えてました //表示する文字 $array = array("A","B","C","D","E","F","G","H"); //表示する文字の個数 $count = count($array); //9の時に表示する文字の番号 $var9 = rand(0,$count); //0~100まで繰り返す for ($i=0 ; $i<=100 ; $i++){ //$iが9の倍数の時に処理する。 if(floor($i/9) == ($i/9)){ //9の倍数の時に入る文字を入れる $moji = $array[$var9]; //$iが9の倍数以外の場合 }else{ //ランダムで表示する文字の番号 $var = rand(0,$count); //もし9の倍数の時に入る文字とランダムで表示する文字の番号が同じ時のみループ while ($var == $var9) { //ランダムで表示する文字の番号 $var = rand(0,$count); } //文字を入れる $moji = $array[$var]; } //文字を出力する。 echo $i.":".$moji."<BR>"; } ではどうでしょうか。

yuena
質問者

補足

お返事ありがとうございますm(__)m 先程間違えてNO5番の方の補足のところへ書いてしまいました(><) 試してみるとあのような表示になり、何故か空欄ができる場所があります。何故なんでしょうか・・・。

  • tacfore
  • ベストアンサー率45% (5/11)
回答No.3

$array = array("A","B","C","D","E"); $count = count($array); for ($i=0 ; $i<=100 ; $i++){ if(floor($i/9) == ($i/9)){ $moji = "Z"; }else{ $var = rand(0,$count); $moji = $array[$var]; } echo $i.":".$moji."<BR>"; } こんな感じでしょうか? 今ちょっとPHPを実行できる環境ではないので(^^;) 適当な回答で本当にすみません。

yuena
質問者

お礼

お返事ありがとうございますm(__)m 教えていただいたので、試してみると↓のようになりました。 0:Z 1: 2: 3:D 4:D 5:B 6:E 7:D 8:A 9:Z 10:E 11:C 12:E 13:B 14:A 15: 16:A 17:A 18:Z 19:B 20:D 21:C 22:A 23: 24:C 25:D 26:A 27:Z 28:E 29:A 30:B 31:A 32:A 33:C 34: 35: 36:Z 37:C 38:C 39:C 40:D 41:B 42:A 43:E 44: 45:Z 46:D 47:D 48:B 49:D 50:D 51:B 52:D 53:E 54:Z 55:E 56: 57:E 58:E 59:C 60:C 61: 62:B 63:Z 64:D 65:A 66:B 67:D 68:D 69:A 70:C 71:A 72:Z 73:D 74: 75:E 76: 77:A 78:C 79: 80:D 81:Z 82:A 83:B 84:A 85:D 86:C 87:E 88:C 89:B 90:Z 91:E 92:B 93:A 94:B 95:D 96: 97:C 98:B 99:Z 100:A 9の倍数の所にZがきてました!なんですが、空欄の所がでてきてしまっています・・・。それと更新しても固定されていて、ランダムに変更していませんでした。でもこれを元に考えれます!ありがとうございましたm(__)m

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

いくつか仕様を確定する必要があるでしょう。 (1)使っていい文字はなにか? 大文字のアルファベットだけとか、数字までよいとか そういうのがないとなにも始まらないかと。 仮に大文字アルファベットだけとなると、100個も ないので、ダブりがでてきますがよろしいのですか? (2)0からなのか1からなのか 題名は1からになっていましたが内容は0からです、 0からだとしたら0は9の倍数ではないのですか? (3)9の倍数と他のところの排他性 9の倍数がかりにAだとしてその他のところにAは でてきてもいいのかによってだいぶプログラムが ことなります。

yuena
質問者

補足

お返事ありがとうございますm(__)m (1)大文字のアルファベットのみと考えています。  ダブりが出ても大丈夫です。 (2)曖昧でごめんなさい!  0~99の数字と考えています。0は9の倍数には入りません。 (3)9の倍数以外の数字にも9の倍数と同じアルファベットが表示され  ても問題はありません。 宜しくお願い致しますm(__)m

回答No.1

配列かどうかはおいといて、、、 > 0~100の数字のうち、9、18、27、36、45、54、63、72、81、90、99だけ同じ文字(例えばA)が表示されるよう> にしたいのです。 <?php $k = "固定値"; for ($i=1; $i<=100; $i++) { $j = rand(); if ($i%9 == 0) $j = $k; echo $j."<br>"; } ?> これではダメなのですか? 何をしたいのか良く理解出来ませんでした^^; これはアドバイスになりますかね。

yuena
質問者

補足

さっそくのお返事ありがとうございますm(__)m 教えていただいたのを試してみたのですが、少し違うようでした。。 私の説明不足ですね・・・(>0<)ごめんなさい! 数字:文字 0:A  1:K  2:P  3:L 4:Q  ・・   ・・  ・・ 8:E  9:Y  10:R  ・・     : 16:T 17:I 18:Y ・・     : 24:R ・・・  ・・  27:Y ・・・ 例えで書いてみましたが、9の倍数の所だけ同じ文字が入っています。他の数字のところの文字はランダムです。 こんな感じで表示させたいのです。 更新を押すたびに9の倍数はランダムに文字が変わります。その時他の数字もランダムに適当な文字になります。 こんな感じで作りたいのですが、どうでしょうか・・・。 もう一度宜しくお願い致しますm(__)m

関連するQ&A

  • ランダム表示文字について

    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
  • ランダムな8桁の文字作成

    ランダムに数字を作成するrandはありますが、私の知っている限りランダムに文字を作成する関数がありません。 どのようにしたらランダムに文字を作成する事が出来るでしょうか? 宜しくお願いします。

    • ベストアンサー
    • 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
  • ランダムの比較について

    今ランダムで数字を選ぶプログラムを作っています。 4つの変数に全て異なる数字を入れたいのですが どうやって比較をすれば良いのか分かりません。 while(true){ $rd1 = rand(0,30); $rd2 = rand(0,30); if($rd1 != $rd2){ break; } } 一応二つの比較ならこれで良いのかと思うのですが 3つ以上になった場合にどういう風にすれば良いのか教えてください。 どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • 3のつく数字と3の倍数のみを表示するプログラム

    C言語で3のつく数字と3の倍数のみ(1~150)を表示するプログラムを作りたいのですがどうすればいいのでしょうか?

  • 外部参照のランダムリンクについて

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

    • 締切済み
    • PHP
  • ランダム関数で任意の桁数のランダム数字を作りたい

    エクセル2000ユーザーです。ランダム関数を使い、重複を許さない5桁のランダム数字を1000個作りたいと思っています。randbetween関数を使おうと思ったのですが、2000では使えないのか、NAMEといったエラー表示がでます。5桁の中は同じ数字がでてきても構いません。例:11295、43634、70676・・・etc。 が、1000個の中では同じ数字が重複しないようにしたいです。 =RIGHT(RAND(),5) のように考えたのですが、他にいい方法はありますでしょうか? マクロやVBAは苦手なので、できれば関数でいいやり方があれば教えてください。

  • ナベアツプログラム(3の倍数と3の付く数字)

    PHPを勉強中です。 勉強の為に思いついたものをPHPで書いてみようと思い、ネタが古いですが100までの数字を表示し、見やすいように3桁揃えで10ずつで改行して、3の倍数と3のつく数字を太字で表示するプログラムを書いてみました。なんとなくできたようなかんじなのですが、30だけ太字になりません。原因がわかる方がいらっしゃれば教えていただけたら嬉しいです。よろしくお願いします。 <?php for($i = 1; $i <= 100; $i++){ if($i % 10 == 0) { echo sprintf('%03d', $i)." "."<br>"; } elseif($i % 3 == 0) { echo('<strong>'.sprintf('%03d', $i)." ".'</strong>'); }elseif(strpos($i,"3") !== false) { echo('<strong>'.sprintf('%03d', $i)." ".'</strong>'); }else{ echo sprintf('%03d', $i)." "; } } ?>

    • ベストアンサー
    • PHP
  • チャットフォームで文字色をランダムに

    ローカルサーバーで簡易チャット使っているのですが、そこでチャット上でランダムで文字色を変えるプログラムを作りたいのですが、 <script language="javascript"> <!--// function Changecolor() { strColorCode = ""; var arrColor = new Array("LightGreen", ~~~~~~~~~~~中略~~~~~~~~~~~~~ "DarkRed") //処理スタート nTemp = Math.round(Math.random()*63) strColorCode = "#" + arrColor[nTemp]; document.fgColor = strColorCode;; } //--> (登録している色の数は63色) といったプログラムを作ったのですが、onLoadで指定することで通常の文字色を変えることができたのですが、ここからチャットで使うことができません。 フォーム上での文字色の名前はcolorにしてあるのですが、valueで指定しても色は変わりませんよね? どうすればチャットで文字色をランダムに変えることができるのでしょうか? 分かりにくい質問ですみません。よろしくお願いします。

  • エクセルで0から300までの数字をランダム表示

    エクセルで0から300までの数字をランダムに表示させる方法はありますか? 262 096 111 282 063 173 263 211 187 118 121 014 039 235 244 273 082 142 166 197 052 019 とこんな風に表示させていきたいんですが できますでしょうか?

専門家に質問してみよう