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

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

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

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

PHP

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

Q&A

解決済

1回答

649閲覧

forやforeachについて

deresuke

総合スコア17

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

PHP

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

0グッド

0クリップ

投稿2019/10/22 05:02

前提・実現したいこと

phpをもちいて、選択クイズを作っています。
(1つのページで以下の様に複数問題をつくりたいです。)

問題1
回答1-1 , 1-2 , 1-3

問題2
回答2-1 , 2-2 , 2-3

問題3
回答3-1 , 3-2 , 3-3

以下の様なコードで入力していると
問題1にたいし1-1~3-3までの回答が表示されうまくいきません。

方法を教えていただければと思います。

<?php ini_set("display_errors" , 1); $questionlists = array( array("q"=>"問題1", "a"=>array("回答1-1","回答1-2","回答1-3")), array("q"=>"問題2", "a"=>array("回答2-1","回答2-2","回答2-3")), array("q"=>"問題3", "a"=>array("回答3-1","回答3-2","回答3-3")), ); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>簡単クイズ</title> <link rel="stylesheet" href="stylesheet.css"> </head> <body>
<?php for($i=0; $i<count($questionlists); $i++) :?> <?php foreach((array)$questionlists[$i]["q"] as $questions):?> <h1><?php echo $questions; ?></h1> <?php for($j=0; $j<3; $j++) :?> <?php foreach($questionlists[$j]["a"] as $answers):?> <p><?php echo $answers; ?></p> <?php endforeach; ?> <?php endfor; ?> <?php endforeach; ?> <?php endfor; ?>
</body> </html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

…失礼を承知で申し上げます…
その記述…可読性的につらくありませんか…?
PHPに関しては、そこまで学に自信はありませんが、質問主の目的を達成したいのであれば、
以下のコードを提案いたします…

PHP

1 2<?php 3 ini_set("display_errors" , 1); 4 $questionlists = array( 5 array("q"=>"問題1", "a"=>array("回答1-1","回答1-2","回答1-3")), 6 array("q"=>"問題2", "a"=>array("回答2-1","回答2-2","回答2-3")), 7 array("q"=>"問題3", "a"=>array("回答3-1","回答3-2","回答3-3")), 8 ); 9?> 10<!DOCTYPE html> 11<html> 12<head> 13 <meta charset="utf-8"> 14 <title>簡単クイズ</title> 15 <link rel="stylesheet" href="stylesheet.css"> 16</head> 17 <body> 18 <?php 19 foreach($questionlists as $line ) 20 { 21 echo $line["q"]; //問題X出力 22 foreach( $line["a"] as $val ) 23 { 24 25 echo $val;//解答X-X出力 26 } 27 28 echo nl2br("\n");//次の問題へ 29 } 30 ?> 31 </body> 32</html> 33

こちらにWeb上で出力を確認できる実行環境も記述いたします…
ご参考までに…

https://paiza.io/ja/projects/new

ちなみに、私的な意見にすぎませんが、arrayの中にarrayを入れまくるような設計は
可読性の観点から、あまり好ましく思えません…
「foreachの問題」という点であれば、知恵を試す的な意味ではありかもしれませんが、
業務系のコードで、このようなarrayの使い方をされると、個人的には頭をかかえる次第です…

…このようなArrayの中にArrayを入れるような発想になった場合
「クラス」に分けて可読性を保持するのが、通常の考え方となると思う次第です…

投稿2019/10/22 05:31

編集2019/10/22 05:33
hermit19901127

総合スコア368

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

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

deresuke

2019/10/22 05:40

hermit様 ご回答だけではなくアドバイスありがとうございます。 解決いたしました。 解読しにくいコードで申し訳ありません、 読みやすいコードをかけるように精進しますね。
hermit19901127

2019/10/22 05:45

むしろ、このような記述ができる事に驚きを覚えた次第です… ですが、よほど理由が無い限りは <?php ?> このコードの中にphpのコードを記述したほうが、一般的側面から考えても良いとお見受けした次第です… 初心者であれば、読みにくいコードを意図せず記述してしまうのは致し方ない事だと思います… 自分でも「なんだこのわけの分からんコードは…!もっと読みやすい書き方が無いのか!」と思った瞬間に調べるのも一考かもしれません…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問