たびたびお世話になっています。
アンケートに関するPHPのページを作成しようと思っています。
1.行いたいことは、アンケートの本文と、選択枝のMySQLへの格納。
2.アンケート画面で、データベースから抽出して、選択肢を表示
3.チェックボックスやラジオボタンの状態を、DBへ書き込み
この中の2をどのようにできるかによって1の画面を作りたいと思っています。
下記のような配列のテスト画面を作りました。
PHP
1//test.php 2<?php 3$survey= array( 4 "sur1"=> array("紹介", 5 "看板", 6 "チラシ", 7 8 "フリーペーパー" => array ("雑誌A", 9 "雑誌B", 10 "雑誌C", 11 "雑誌D"), 12 13 "ネット" => array ("ホームページ", 14 "EPARK", 15 "エキテン", 16 "LINE", 17 "Facebook", 18 "Instagram", 19 "その他") 20 ), 21 22 "sur2"=> array("A市","B市","D市","E郡","その他のA県内","B県","その他の県"), 23 "sur3"=> array("車で5分以内","車で10分以内","車で20分以内","車で30分以内","それ以上") 24 25); 26 27 28var_dump($survey); 29 30print '<br><br><br>'; 31 32var_dump($survey['sur1']); 33 34print '<br><br><br>'; 35 36var_dump($survey['sur1']['フリーペーパー']); 37 38print '<br><br><br>'; 39 40 41//試してみてうまくいかなかったコードです。 42//このようにすれば、フリーペーパーの中身は表示されますが、sur1やフリーペーパーをあらかじめ入力するのではなく、変数で入れたいのですが、その変数の取得方法が分かりませんでした。 43foreach( $survey['sur1']['フリーペーパー'] as $value ){ 44 echo $value."<br>"; 45} 46 47 48?>
上記のPHPに対してブラウザに表示された内容のコピペです。
array(3) { ["sur1"]=> array(5) { [0]=> string(6) "紹介" [1]=> string(6) "看板" [2]=> string(9) "チラシ" ["フリーペーパー"]=> array(4) { [0]=> string(7) "雑誌A" [1]=> string(7) "雑誌B" [2]=> string(7) "雑誌C" [3]=> string(7) "雑誌D" } ["ネット"]=> array(7) { [0]=> string(18) "ホームページ" [1]=> string(5) "EPARK" [2]=> string(12) "エキテン" [3]=> string(4) "LINE" [4]=> string(8) "Facebook" [5]=> string(9) "Instagram" [6]=> string(9) "その他" } } ["sur2"]=> array(7) { [0]=> string(4) "A市" [1]=> string(4) "B市" [2]=> string(4) "D市" [3]=> string(4) "E郡" [4]=> string(19) "その他のA県内" [5]=> string(4) "B県" [6]=> string(15) "その他の県" } ["sur3"]=> array(5) { [0]=> string(16) "車で5分以内" [1]=> string(17) "車で10分以内" [2]=> string(17) "車で20分以内" [3]=> string(17) "車で30分以内" [4]=> string(12) "それ以上" } } array(5) { [0]=> string(6) "紹介" [1]=> string(6) "看板" [2]=> string(9) "チラシ" ["フリーペーパー"]=> array(4) { [0]=> string(7) "雑誌A" [1]=> string(7) "雑誌B" [2]=> string(7) "雑誌C" [3]=> string(7) "雑誌D" } ["ネット"]=> array(7) { [0]=> string(18) "ホームページ" [1]=> string(5) "EPARK" [2]=> string(12) "エキテン" [3]=> string(4) "LINE" [4]=> string(8) "Facebook" [5]=> string(9) "Instagram" [6]=> string(9) "その他" } } array(4) { [0]=> string(7) "雑誌A" [1]=> string(7) "雑誌B" [2]=> string(7) "雑誌C" [3]=> string(7) "雑誌D" } 雑誌A 雑誌B 雑誌C 雑誌D
ブラウザのソースのコピペです。
array(3) { ["sur1"]=> array(5) { [0]=> string(6) "紹介" [1]=> string(6) "看板" [2]=> string(9) "チラシ" ["フリーペーパー"]=> array(4) { [0]=> string(7) "雑誌A" [1]=> string(7) "雑誌B" [2]=> string(7) "雑誌C" [3]=> string(7) "雑誌D" } ["ネット"]=> array(7) { [0]=> string(18) "ホームページ" [1]=> string(5) "EPARK" [2]=> string(12) "エキテン" [3]=> string(4) "LINE" [4]=> string(8) "Facebook" [5]=> string(9) "Instagram" [6]=> string(9) "その他" } } ["sur2"]=> array(7) { [0]=> string(4) "A市" [1]=> string(4) "B市" [2]=> string(4) "D市" [3]=> string(4) "E郡" [4]=> string(19) "その他のA県内" [5]=> string(4) "B県" [6]=> string(15) "その他の県" } ["sur3"]=> array(5) { [0]=> string(16) "車で5分以内" [1]=> string(17) "車で10分以内" [2]=> string(17) "車で20分以内" [3]=> string(17) "車で30分以内" [4]=> string(12) "それ以上" } } <br><br><br>array(5) { [0]=> string(6) "紹介" [1]=> string(6) "看板" [2]=> string(9) "チラシ" ["フリーペーパー"]=> array(4) { [0]=> string(7) "雑誌A" [1]=> string(7) "雑誌B" [2]=> string(7) "雑誌C" [3]=> string(7) "雑誌D" } ["ネット"]=> array(7) { [0]=> string(18) "ホームページ" [1]=> string(5) "EPARK" [2]=> string(12) "エキテン" [3]=> string(4) "LINE" [4]=> string(8) "Facebook" [5]=> string(9) "Instagram" [6]=> string(9) "その他" } } <br><br><br>array(4) { [0]=> string(7) "雑誌A" [1]=> string(7) "雑誌B" [2]=> string(7) "雑誌C" [3]=> string(7) "雑誌D" } <br><br><br><br><br><br>雑誌A<br>雑誌B<br>雑誌C<br>雑誌D<br>
上記を元に、ブラウザに下記のように出力したいと思っていますが、上記のような配列をもとに、選択肢の数だけ出力するのは可能でしょうか?
アンケート
ここにアンケート本文
〇紹介 〇看板 〇チラシ フリーペーパー【 〇雑誌A 〇雑誌B 〇雑誌C 〇雑誌D 】 ネット 【 〇ホームページ 〇EPARK 〇エキテン 〇LINE 〇Facebook 〇Instagram 〇その他 】
ここにアンケート本文
〇A市 〇B市 〇D市 〇E郡 〇その他のA県内 〇B県 〇その他の県
ここにアンケート本文
〇車で5分以内 〇車で10分以内 〇車で20分以内 〇車で30分以内 〇それ以上
上記のように書き出すことが可能であれば、この選択肢を登録する画面や、DBへの書き込み、DBからの書き出しを検討したいと思っています。難解すぎたり、非効率であれば、別の方法を使いたいとも思っていますが、DBへの負荷?などを考えると上記のようにした方がいいような気がしています。
foreachなどをいくつか試しましたが、うまくいきませんでした。
実際には、登録状況で変わる選択肢の状態にあわせてforeachで取り出したいのですが、なかなかうまくいきません。上記のように、配列と配列じゃないものが混ざっているのはNGでしょうか?上記のような配列を作るのは、問題があるのか、また書き出し方(チェックボックスやHTMLタグは不要ですが、条件分岐やループの回し方を知りたいです)等、お知恵をお借りできればと思っています。
お手数おかけしますが、よろしくお願いします。
追記
あやふやな質問で申し訳ありません。
具体的に、
・選択肢の数だけループを回したいと思っています。
・配列の中身が、配列だったり連想配列だったりしていますが、その状況にあわせたループの作り方がわかりません。
・配列の中身を下記のようなループで表現したいのですが、どのようにしたらいいかわかりませんでした。
大外のループ(sur1,sur2,sur3などがあるだけ回す)
外のループ sur1の中の紹介、看板、チラシなどを中身のあるだけ回す。
フリーペーパー部分のような、配列を持った部分をさらにループで回す。
外のループ sur2の中身分回す
外のループ sur3の中身分回す
のようなイメージをしています。
sur1,sur2,フリーペーパーなどを直接記入せず、変数で処理できればと思います。
こちらのルール違反かもしれませんが、ご回答いただいたことをもとにまずこのようにしてみました。
<?php $survey_q = array ( "sur1" => "当店をお知りになったきっかけは何ですか?", "sur2" => "お住まいの市町村はどちらですか?", "sur3" => "当店におこしいただくまでの時間はどのくらいですか?", ); $survey= array( "sur1"=> array("紹介", "看板", "チラシ", "フリーペーパー" => array ("雑誌A", "雑誌B", "雑誌C", "雑誌D"), "ネット" => array ("ホームページ", "EPARK", "エキテン", "LINE", "Facebook", "Instagram", "その他") ), "sur2"=> array("A市","B市","D市","E郡","その他のA県内","B県","その他の県"), "sur3"=> array("車で5分以内","車で10分以内","車で20分以内","車で30分以内","それ以上") ); foreach ($survey_q as $key => $value){ $select_key = $key; print $value; print '<br><br>'; //print $select_key; // foreach($survey[$select_key] as $key => $choiceData1) { // 複数選択肢か判定 if(is_array($choiceData1)) { // 複数選択肢の項目表示 echo $key . PHP_EOL; // 複数選択肢表示 foreach($choiceData1 as $choiceData2) { echo $choiceData2 . PHP_EOL; } } else { // sur1,2,3直下の選択肢表示 echo $choiceData1 . PHP_EOL; } } print '<br><br><br>'; } print '<br><br><br>'; ?>
結果このように表示されました。これをもとに少しずつ目的の状態まで変えていきたいと思います。ご回答いただいた皆様、本当にありがとうございました。
当店をお知りになったきっかけは何ですか? 紹介 看板 チラシ フリーペーパー 雑誌A 雑誌B 雑誌C 雑誌D ネット ホームページ EPARK エキテン LINE Facebook Instagram その他 お住まいの市町村はどちらですか? A市 B市 D市 E郡 その他のA県内 B県 その他の県 当店におこしいただくまでの時間はどのくらいですか? 車で5分以内 車で10分以内 車で20分以内 車で30分以内 それ以上
回答3件
あなたの回答
tips
プレビュー