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

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

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

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

Q&A

解決済

3回答

2917閲覧

PHP サイコロの出目の計算

akoro

総合スコア27

PHP

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

0グッド

0クリップ

投稿2019/01/15 02:35

編集2019/01/15 04:01

■背景
PHP独学、初心者の者です。
検索と教本を片手に作業していますが行き詰ってしまったのでアドバイス頂けますと助かります。

■目標
サイコロの面の数と、サイコロのふる回数がかわっても式が作動するようにしたい

6面、1000回ふる、という条件だと以下で作動した

$roll=[1=>0,2=>0,3=>0,4=>0,5=>0,6=>0]; for($i=1;$i<=1000;$i++){ $dice=mt_rand(1,6); $total=$roll[$dice]++; } echo "1:".$roll[1]."<br>\n"; echo "2:".$roll[2]."<br>\n"; echo "3:".$roll[3]."<br>\n"; echo "4:".$roll[4]."<br>\n"; echo "5:".$roll[5]."<br>\n"; echo "6:".$roll[6]."<br>\n";

■行き詰った個所

$face=$_POST['face']; //サイコロの面の数 $num=$_POST['num']; //サイコロをふる回数

この前のページに入力フォームを作成し、サイコロの面の数とふる回数を設定し、作動するよう設定したい

$roll=[1=>0,2=>0,3=>0,4=>0,5=>0,6=>0];
の[]内が設定できない、どうかいていいか分からない

お手数お変え致します、お力添えいただけますと幸いです。

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

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

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

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

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

m.ts10806

2019/01/15 02:39

$_POSTということは何かしら入力された情報を受け取るということでしょうか。
akoro

2019/01/15 02:46

ご指摘ありがとうございます、追記いたしました。 取得した情報をもとに作動する、式を作成しようと考えています。
papinianus

2019/01/15 02:49

[定数化]はおそらく[変数化]、あるいは先を見れば[関数化]、ではないかと思います。固定にする意味に捉えられると有意な回答を得にくいと思います。
akoro

2019/01/15 02:53

おっしゃる通り最終的には関数化したいと考えています。アドバイスありがとうございます。
m.ts10806

2019/01/15 03:46

タイトルもあわせておいてもらえたらと。
akoro

2019/01/15 04:02

かしこまりました。ありがとうございます。
m.ts10806

2019/01/15 04:31

解決したのでしたら「ベストアンサー」を選んで解決済みにしてください。 既に次の質問を立てられているようですが、未解決質問を放置のまま次の質問へいくのは印象がよくありません(回答が得られにくくなります)
akoro

2019/01/15 04:38

至らない点が多い中でたくさんご指摘、感謝致します。 まだ回答すべてを理解できたわけではありませんが、調べて分かるところ掻い摘んで全員のを参考に致しました。 ありがとうございます。
guest

回答3

0

ベストアンサー

php

1$roll = array_fill(1, $_POST['face'], 0); 2for($i=1;$i<=$_POST['num'];$i++){ 3 $dice=mt_rand(1,$_POST['face']); 4 $total=$roll[$dice]++; 5}

投稿2019/01/15 02:46

編集2019/01/15 02:47
papinianus

総合スコア12705

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

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

akoro

2019/01/15 03:07

迅速な返答ありがとうございました。 作動できました!勉強になります。
papinianus

2019/01/15 03:10

こちら考えかたとして(array_fill)を紹介したかっただけなので、実際のコードはyambejp様のを参考にしてください(postはそのまま利用してはいけないので)
akoro

2019/01/15 03:18

はい、papinianus様の式をベースに、ほかの方の式と組み合わせて、作動確認いたしました。 ご丁寧にありがとうございます、助かります。
guest

0

こんな感じです

PHP

1<?PHP 2$face=filter_input(INPUT_POST,"face",FILTER_VALIDATE_INT,["options"=>["min_range"=>1,"default"=>6]]); 3$num=filter_input(INPUT_POST,"num",FILTER_VALIDATE_INT,["options"=>["min_range"=>1,"default"=>1000]]); 4if(count($_POST)>0){ 5 $roll=array_fill(1,$face,0); 6 for($i=1;$i<=$num;$i++){ 7 $dice=mt_rand(1,$face); 8 $roll[$dice]++; 9 } 10 foreach($roll as $key=>$val){ 11 echo "{$key}:{$val}<br>\n"; 12 } 13} 14?> 15<form method="post"> 16<input type="text" name="face" value="<?=$face;?>"><br> 17<input type="text" name="num" value="<?=$num;?>"><br> 18<input type="submit" value="go"> 19</form>

投稿2019/01/15 02:50

編集2019/01/15 02:52
yambejp

総合スコア114915

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

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

akoro

2019/01/15 03:09

ご丁寧に全体のプログラミングもありがとうございます、助かります。 検索で見つけられなかった式があるので勉強になります。
guest

0

「定数化」ではなく「動的に切り替えたい」というのが正しい表現かと思います。
「定数」だと後から変更が入らない固定された情報と言う意味ですので。

いずれにしてもforを活用すれば作れると思います。

php

1<?php 2$result = ""; 3$face = 6; 4$num = 1000; 5if($_SERVER["REQUEST_METHOD"] === "POST"){ 6 $roll = []; 7 $face = filter_input(INPUT_POST,"face",FILTER_VALIDATE_INT); 8 $num = filter_input(INPUT_POST,"num",FILTER_VALIDATE_INT); 9 if(!is_null($face) && !is_null($num)){ //両方正しく入力されていた場合のみ動作 10 $roll = array_fill(1,$face,0);//配列を作成 11 for($i=1;$i<=$num;$i++){//指定回数振る 12 $dice=mt_rand(1,$face); 13 $roll[$dice]++;//加算 14 } 15 foreach($roll as $fc=>$count){ //結果表示部分 16 $result .= "{$fc}:{$count}<br />\n"; 17 } 18 } 19} 20echo <<<EOF 21<!DOCTYPE html> 22<html> 23<head> 24<meta charset="UTF-8"> 25<title>dice</title> 26</head> 27<body> 28<form method="post"> 29 サイコロの面の数:<input type="number" name="face" placholder="サイコロの面の数" value="{$face}"> 30 サイコロをふる回数:<input type="number" name="num" placholder="サイコロをふる回数" value="{$num}"> 31 <button>送信</button> 32</form> 33{$result} 34</body> 35</html> 36EOF; 37

投稿2019/01/15 02:59

m.ts10806

総合スコア80854

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

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

akoro

2019/01/15 03:05

>>>「定数化」ではなく「動的に切り替えたい」というのが正しい表現かと思います。 訂正いたしました、ご指摘ありがとうございます。
m.ts10806

2019/01/15 04:28

他の回答を見てから回答したわけではないですが、コード内容丸被りになってしまいました。 array_fill()が理解難しければ$faceの回数forで回せば同様の配列が作れるのでそちらも試してみてください。
akoro

2019/01/15 04:35

array_fill()とforどちらも試しました、作動しました。 見たことのない形式の式ばかりでしたので解読に時間かかり、返すのが遅くなり失礼いたしました。
m.ts10806

2019/01/15 04:35

PHPマニュアルを辞書がわりに使ってください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問