• ベストアンサー

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

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

  • ベストアンサー
  • 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