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

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

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

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

Q&A

解決済

1回答

423閲覧

【PHP】複数ある選択しの組合せを自動で出力したい

porusan0880

総合スコア19

PHP

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

0グッド

0クリップ

投稿2017/07/12 00:53

編集2017/07/12 01:05

PHPで10項目の質問にラジオボタンで選択肢が3つあるフォームを作成しております。
各質問にかならず一つはチェックを入れるといった感じになります。

このフォームの選択肢の組み合わせをExcelにまとめると考えた場合、
自動でこの組み合わせ、この組み合わせと一覧で出力してくれる方法などあるのでしょうか。
現在、各質問に対して選択肢を選択後「結果を表示(submit)」をクリックするとその選択した組み合わせをcsvに書き込むというのはできています。
ですが、この方法だと何万通りぐらいあるのを人力でやらなくてはいけないので時間がかかってしまいます。
PHPで自動で組み合わせの一覧を出力してくれる方法があれば教えていただきたいです。
よろしくお願いいたします。
ちなみに、DBは使用しておりません。

== form.php ==

<p>各項目に該当する選択肢を選択してください</p> <form action="result.php" method="post"> <div class="simulation_area"> <dl> <dt>養生数</dt> <dd class="required"> <p><input class="validate required" type="radio" id="curing1" value="12000" name="curing_t"><label for="curing1">10t以上</lable></p> <p><input type="radio" id="curing2" value="7000" name="curing_t"><label for="curing2">10~5t以上</lable></p> <p><input type="radio" id="curing3" value="2000" name="curing_t"><label for="curing3">5t以上</lable></p> </dd> </dl> <dl> <dt>養生温度</dt> <dd> <p><input class="validate required" type="radio" id="curing4" value="65" name="curing_ond"><label for="curing4">70~60°</lable></p> <p><input type="radio" id="curing5" value="55" name="curing_ond"><label for="curing5">60~50°</lable></p> <p><input type="radio" id="curing6" value="45" name="curing_ond"><label for="curing6">50~40°</lable></p> </dd> </dl> <dl> <dt>養生時間</dt> <dd> <p><input class="validate required" type="radio" id="curing7" value="3" name="curing_time"><label for="curing7">5H以上</lable></p> <p><input type="radio" id="curing8" value="2" name="curing_time"><label for="curing8">5~3H</lable></p> </dd> </dl> <dl> <dt>養生室の大きさ【間口】</dt> <dd> <p><input class="validate required" type="radio" id="curing9" value="4" name="curing_w"><label for="curing9">3m以上</lable></p> <p><input type="radio" id="curing10" value="2" name="curing_w"><label for="curing10">3~1m</lable></p> </dd> </dl> <dl> <dt>養生室の大きさ【高さ】</dt> <dd> <p><input class="validate required" type="radio" id="curing11" value="4" name="curing_h"><label for="curing11">3m以上</lable></p> <p><input type="radio" id="curing12" value="2" name="curing_h"><label for="curing12">3~1m</lable></p> </dd> </dl> <dl> <dt>養生室の大きさ【長さ】</dt> <dd> <p><input class="validate required" type="radio" id="curing13" value="12" name="curing_l"><label for="curing13">10m以上</lable></p> <p><input type="radio" id="curing14" value="7" name="curing_l"><label for="curing14">10~5m</lable></p> <p><input type="radio" id="curing15" value="2" name="curing_l"><label for="curing15">5m以下</lable></p> </dd> </dl> <dl> <dt>養生室の材質</dt> <dd> <p><input class="validate required" type="radio" id="curing16" value="7" name="material"><label for="curing16">シート</lable></p> <p><input type="radio" id="curing17" value="5" name="material"><label for="curing17">ブロック</lable></p> <p><input type="radio" id="curing18" value="3" name="material"><label for="curing18">SUSパネル</lable></p> <p><input type="radio" id="curing19" value="4" name="material"><label for="curing19">FRPパネル</lable></p> </dd> </dl> <dl> <dt>燃料</dt> <dd> <p><input class="validate required" type="radio" id="curing20" value="8700,80" name="fuel"><label for="curing20">重油、灯油</lable></p> <p><input type="radio" id="curing21" value="22000,200" name="fuel"><label for="curing21">ガス</lable></p> </dd> </dl> <dl> <dt>現在の燃料</dt> <dd> <p><input class="validate required" type="radio" id="curing22" value="12" name="now_fuel"><label for="curing22">10リットル/t以上</lable></p> <p><input type="radio" id="curing23" value="7" name="now_fuel"><label for="curing23">10~5リットル/t</lable></p> <p><input type="radio" id="curing24" value="2" name="now_fuel"><label for="curing24">5リットル/t以下</lable></p> </dd> </dl> <dl> <dt>現在の燃料2</dt> <dd> <p><input class="validate required" type="radio" id="curing25" value="7" name="now_fuel2"><label for="curing25">5Nm<span class="sup_text">3</span>/t以上</lable></p> <p><input type="radio" id="curing26" value="4" name="now_fuel2"><label for="curing26">5~3Nm<span class="sup_text">3</span>/t</lable></p> <p><input type="radio" id="curing27" value="2" name="now_fuel2"><label for="curing27">3Nm<span class="sup_text">3</span>/t以下</lable></p> </dd> </dl> <input class="simulation_btn" type="submit" value="結果を表示"> </div> </form>

== result.php ==

<?php //値を取得 $a = $_POST["curing_t"]; $b = $_POST["curing_ond"]; $c = $_POST["curing_time"]; $d = $_POST["curing_w"]; $e = $_POST["curing_h"]; $f = $_POST["curing_l"]; $g = $_POST["material"]; $h = explode(',',$_POST["fuel"]); $j = $_POST["now_fuel"]; $k = $_POST["now_fuel2"]; //各計算式に当てはめる $q1 = $a * 0.2 * ($b - 30) * $c; $q2= $a * 0.115 * ($b - 30) * $c; // 負荷計算 $area_a = $d * $f *2; $area_b = $e * $f *2; $area_c = $d * $e *2; $area = $area_a + $area_b + $area_c; $q3 = $g * $area * ($b-1); $qa = ($q1 + $q2 + $q3) * 1.4; // 1tあたりの燃料消費量(スチームチェンヂャー) $qb = $qa / intval($h[0]) / $a * 1000; // 効果金額 $result = number_format(($j - $qb) * $j * intval($h[1]) * 22 * 12); echo $result; // データ一覧。 $data = array($a, $b, $c, $d, $e, $f, $g, $h[0], $h[1], $j, $k); $ShiftJIS = $data; //文字コードを変えるので、専用の配列を作成してコピー mb_convert_variables('Shift_JIS', 'UTF-8', $ShiftJIS); //文字コードをUTF-8からShiftJISに変更 $csv = fopen('file.csv', 'a'); //csvファイルと書き込みモードを指定 fputcsv($csv, $ShiftJIS); //変換した配列をcsvファイルに書き込み実行 fclose($csv); //csvファイルを閉じる ?>

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

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

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

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

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

shi_ue

2017/07/12 00:58

HTMLやご自身が試されたコードを提示してください。
guest

回答1

0

ベストアンサー

たぶんもっと良い方法はあると思いますが、一案として回答します。

###目的
組合せの一覧とそれぞれの件数を出力する。

###前提
既存の出力結果(CSV)の各設問の値が、1,2,3で入っている想定。


1,2,3,1,2,3,1,2,3,1,2
2,3,1,2,3,1,2,3,1,2,3

###方法(PHPでやる場合)
CSVファイルを1行ずつ読み込む。
読み込んだ行データそのものを連想配列のキーにしてカウントする。

PHP

1$line = fgets(省略); 2$key = rtrim($line); 3if(isset($count[$key])){ 4 $count[$key]++; 5} else { 6 $count[$key] = 1; 7}

最後に連想配列の中身を出力する。

PHP

1foreach($count $key => $value){ 2 printf("%s=%d\n", $key, $value); 3}

###方法(Excelでやる場合)
CSVファイルをExcelで開く。
A~Jセルに設問の値が入っている。
KセルあたりにA~Jの値を結合した値を表示する。

K1 =CONCATENATE(A1,B1,C1,D1,E1,F1,G1,H1,I1,J1)

K1を全ての行にコピペ。
1行目に空行を挿入し、K1に適当なラベルを記入。
K列を選択し、[挿入]-[ピボットテーブル]を選択。
行ラベルにK1に記入したラベルをドラッグ。
値にK1に記入したラベルをドラッグ(デフォルトでデータの個数が選択されているはず)

投稿2017/07/12 02:20

ttyp03

総合スコア16998

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問