質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

4回答

7910閲覧

rand関数を使った%の確率で任意の処理の仕方

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/10/18 05:57

編集2018/10/23 01:23

rand関数を使って以下の処理がしたいです。
60%の確率でCが出力
20%の確率でUCが出力
10%の確率でRが出力
7%の確率でSRが出力
3%の確率でURが出力

<?php $like = array( 'C' => 60, 'UC' => 80, 'R' => 90, 'SR' => 97, 'UR' => 100, ); //$keyをランダムに表示させる $rand = mt_rand(1,100); foreach($like as $key =>$val){ if($rand > $val){ echo $key; }elseif($rand > $val){ echo $key; }elseif($rand > $val){ echo $key; }elseif($rand > $val){ echo $key; }else{ echo $key; } } 上記を実行しますと CUCRSRURと全部が実行されてしまいます。 色々調べてはみましたが自己解決ができず ご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

解決方法は既に回答されている方がいらっしゃるので、ツッコミどころを。

  • elseを含むすべての分岐で$keyを出力しているので全部表示されます。
  • そもそも$rand > $valという条件が4つある必要がないです。
  • 「設定した値以上」という条件では50のときはどうなるのでしょう?

投稿2018/10/18 06:16

dice142

総合スコア5158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/10/18 06:39

回答ありがとうございます。 自分でもなんでこんな記述をしたのと思っております。 これからは冷静に考えることを心がけます。
guest

0

冷静にコードを確認しましょう。

php

1if($rand > $val){ 2 echo $key; 3}elseif($rand > $val){ 4 echo $key; 5}elseif($rand > $val){ 6 echo $key; 7}elseif($rand > $val){ 8 echo $key; 9}else{ 10 echo $key; 11}

どんな条件の場合でも echo $key; してます。

投稿2018/10/18 06:13

mather

総合スコア6753

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/10/18 06:29

本当ですね、 今まで気づきませんでした。 これからは冷静に考えることを心がけます。 ありがとうございました。
guest

0

if / elseif で判定している式がすべて同じってのも気になりますが、

PHP

1$like = array( 2 'C' => 60, 'UC' => 80, 'R' => 90, 'SR' => 97, 'UR' => 100, 3); 4$rand = mt_rand(1,100); 5foreach($like as $key =>$val){ 6 if($rand < $val){ 7 echo $key; 8 break; 9 } 10} 11

投稿2018/10/18 06:12

daisuke7

総合スコア1563

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

daisuke7

2018/10/18 06:20

あぁ、< じゃなくて <= だ。俺のコードバグってる。
退会済みユーザー

退会済みユーザー

2018/10/18 06:35

回答ありがとうございます。 同じ式にしていることに気づきませんでした。 これからは冷静に考えることを心がけます。
guest

0

ベストアンサー

  • 50とかのとき、Cが出てこないから、多分不等号が逆。
  • ランク決まったらforeachやめればいいからbreak;

で、こう。

php

1<?php 2$like = array( 3'C' => 60, 4'UC' => 80, 5'R' => 90, 6'SR' => 97, 7'UR' => 100, 8); 9 10//$keyをランダムに表示させる 11$rand = mt_rand(1,100); 12foreach($like as $key =>$val){ 13 if($rand <= $val){ 14 echo $key; 15 break; 16 } 17}

投稿2018/10/18 06:09

編集2018/10/18 06:13
papinianus

総合スコア12705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/10/18 06:21

凄く悩んでいました。 わかりやすいご回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問