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

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

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

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

Q&A

解決済

2回答

1914閲覧

コイントスの表裏の回数を表示させたい

YutaEvol

総合スコア15

PHP

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

0グッド

0クリップ

投稿2020/03/11 05:59

phpここに言語を入力

1<?php 2 3$value=''; 4$a=0; 5$b=0; 6if ($_SERVER['REQUEST_METHOD'] === 'POST'){ 7$value=$_POST['num']; 8 9 10 11 12 $array=array('表','裏'); 13 $rand=array_rand($array,1); 14 15 if($value===10){ 16 for($i=1;$i<=10;$i++){ 17 18 if($array[$rand]==='表'){ 19 $a++; 20 21 }else if($array[$rand]==='裏'){ 22 $b++; 23 24 } 25 } 26 } 27 if($value===100){ 28 for($i=1;$i<=100;$i++){ 29 if($array[$rand]==='表'){ 30 $a++; 31 32 }else if($array[$rand]==='裏'){ 33 $b++; 34 35 } 36 } 37 } 38 if($value===1000){ 39 for($i=1;$i<=1000;$i++){ 40 if($array[$rand]==='表'){ 41 $a++; 42 }else if($array[$rand]==='裏'){ 43 $b++; 44 45 } 46 } 47 } 48} 49?> 50<!DOCTYPE html> 51<html lang="ja"> 52<head> 53 <meta charset="UTF-8"> 54 <title>課題</title> 55</head> 56<body> 57 <article id="wrap"> 58 <section> 59 <p>表:<?php 60 echo $a; 61 ?> 62</p> 63 <p>裏: <?php 64 echo $b; 65 ?> 66</p> 67 </section> 68 <form method="post" action=""> 69 <select name="num"> 70 <option value="">回数選択</option> 71 <option value="10">10</option> 72 <option value="100">100</option> 73 <option value="1000">1000</option> 74 </select>75 <button type="submit">コイントス</button> 76 </form> 77 </article> 78</body> 79</html>

問題
コイントスをセレクトボックスで指定した回数(10 or 100 or 1000)行い、表と裏が出た回数を表示するプログラムを作成してください。
質問
コイントスの問題で表と裏の回数を表示させたいのですが
10回、100回、1000回を選択してボタンを押しても0回としか表示されません
考え方としては表、裏の配列を作ってそれをランダムに取り出してそのコイントスの回数分だけ
繰り返しさせるという方針でコードをつくったのですがだめでした
配列の部分のどこが間違っているかご指摘よろしくお願いします。

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

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

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

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

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

m.ts10806

2020/03/11 06:07

インデントきちんと揃えてもらえますか?{}の対応が全く見えません
m.ts10806

2020/03/11 06:11

あと、コードがかなり冗長です。 「100のときに100回」「1000のときに1000回」なら「nのときにn回」なので、分岐させる必要ないのでは。 わざわざ別でカウント用の変数伴う必要もないのでは。
退会済みユーザー

退会済みユーザー

2020/03/11 06:17

この問題文でググると、teratailにも過去質問があるし、どこかのスクールの教材か何かだと察する。
guest

回答2

0

ベストアンサー

$valueに入っている値は文字列型(String)なので===で数値と比較しても
常に偽になります。
参考:(php.net)比較演算子

php

1if($value===10){ // 文字列型と数値を比較しているので常に偽 2} 3if($value===100){// 文字列型と数値を比較しているので常に偽 4} 5if($value===1000){// 文字列型と数値を比較しているので常に偽 6}

また、それぞれのifブロックの中でfor()ループしてますが
$rand=array_rand($array,1);はループの外なので
10,100,1000それぞれ表または裏が10,100,1000になります。

投稿2020/03/11 06:13

編集2020/03/11 06:15
Y.H.

総合スコア7914

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

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

m.ts10806

2020/03/11 06:23 編集

前半、真ですよ。 "100"==100 は true です。 PHPそこは緩いので…(もちろん===使うべきというのは大賛成です)
Y.H.

2020/03/11 06:45 編集

ん? 「どこが間違っているかご指摘ください」なので 回答は、間違っていることろの指摘ですよ。 質問では===で比較しているので常に偽 $ cat test.php <?php if ($_SERVER['REQUEST_METHOD'] === 'POST'){ $value=$_POST['num']; var_dump($value===10); var_dump($value===100); var_dump($value===1000); } $ curl -s http://localhost/test.php --data 'num=10' bool(false) bool(false) bool(false) $ curl -s http://localhost/test.php --data 'num=100' bool(false) bool(false) bool(false) $ curl -s http://localhost/test.php --data 'num=1000' bool(false) bool(false) bool(false)
m.ts10806

2020/03/11 06:51

失礼。見間違えと思い込みでした。
Y.H.

2020/03/11 06:54

:-)
YutaEvol

2020/03/11 23:57

m.ts1086さんがご指摘するようにコードがとても見づらかったのですが ご丁寧に間違いを指摘していただきありがとうございました.  おかげで解決できました!
guest

0

この手のものはまず
HTML組まず、
フォームからの入力値からではなく固定値で
ミニマムコードでやるべきと思います。

php

1php 2$loop = 100; 3$coin = ["f"=>0,"b"=>0]; 4for($i=0;$i<$loop;$i++){ 5 $coin[array_rand($coin)]++; 6} 7var_dump($coin);

array_rand()の特徴から、元となる配列を整理すればけっこう簡略化可能です。

なお、何かの課題なのであれば自分で説明できないコードを持っていってはいけません。
説明求められて答えられなくて評価落ちても私は知りません。

投稿2020/03/11 06:20

編集2020/03/11 06:25
m.ts10806

総合スコア80850

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問