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

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

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

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

PHP

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

Q&A

解決済

2回答

1718閲覧

foreach文で出てるWarningを消したい

YukaSaku

総合スコア52

foreach

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

PHP

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

0グッド

0クリップ

投稿2017/04/19 20:46

だいぶ酷いプログラムでwarningがでまくりなんですが、なぜ出てるのかわかりません。
repair.phpからprocessform.phpで処理をしようとしています。

プログラム内の
foreach($labels1 as $field => $label1)
foreach($labels2 as $field => $label2)
foreach($labels3 as $field => $label3)
で、warningが出ています。

なぜでしょうか。
またこのforeach文の意味は、
$fieldとして入力されたデータ$labels1を受け取り、$labels1以上であれば次のステップへという解釈で問題ないでしょうか?

すみませんが、教えてください。よろしくお願いします。

processform.php

PHP

1 2<html> 3<head> 4 <style type='text/css'> 5 <!-- 6 form { 7 margin: 1.5em 0 0 0; 8 padding: 0; 9 float: center; 10 } 11 .field {padding-bottom: 1em;} 12 label { 13 font-weight: bold; 14 float: left; 15 width: 20%; 16 margin-right: 1em; 17 text-align: right; 18 } 19 #submit { 20 margin-left: 35%; 21 } 22 --> 23 </style> 24</head> 25<body> 26<h2>Please fill up this form below</h2> 27<?php 28/* Script name: process_form.php (1-1) 29 * Description: Script displays all the information 30 * passed from a form. 31 */ 32 echo "<ol>"; 33 foreach($_POST as $field => $value) 34 { 35 echo "<li> $field = $value</li>"; 36 } 37 echo "</ol>"; 38echo "<form action='repair.php'method='POST'>"; 39 40 41 /* loop that displays the form label1*/ 42 echo "<form action='checkblank_.php' method='post'>"; 43 foreach($labels1 as $field=> $labels1) 44 { 45 echo "<div class='field'><label for='$field'>$label1</label> 46 <input id='$field' name='$field' type='text' 47 size='50%' maxlength='65' /></div>\n"; 48 } 49 50 51 /* loop that displays the form label2 */ 52 echo "<form action='checkblank_.php' method='post'>"; 53 foreach($labels2 as $field=> $labels2) 54 { 55 echo "<label for='$field'>$label2</label>\n"; 56 } 57 /* loop that displays the prov */ 58 ?> 59 60 <select name="prov_state"> 61 <option value="NULL">Choose One</option> 62<option value="ON">ON</option> 63<option name="prov_state"value="QC">QC</option> 64<option name="prov_state"value="NS">NS</option> 65<option name="prov_state"value="NB">NB</option> 66<option name="prov_state"value="MB">MB</option> 67<option name="prov_state"value="BC">BC</option> 68<option name="prov_state"value="PE">PE</option> 69<option name="prov_state"value="SK">SK</option> 70<option name="prov_state"value="AB">AB</option> 71<option name="prov_state"value="NL">NL</option> 72<option name="prov_state"value="NT">NT</option> 73<option name="prov_state"value="YE">YE</option> 74<option name="prov_state"value="NU">NU</option> 75<option name="prov_state"value="AL">AL</option> 76<option name="prov_state"value="AK">AK</option> 77<option name="prov_state"value="AZ">AZ</option> 78<option name="prov_state"value="AR">AR</option> 79<option name="prov_state"value="CA">CA</option> 80<option name="prov_state"value="CO">CO</option> 81<option name="prov_state"value="CT">CT</option> 82<option name="prov_state"value="DE">DE</option> 83<option name="prov_state"value="FL">FL</option> 84<option name="prov_state"value="GA">GA</option> 85<option name="prov_state"value="ID">ID</option> 86<option name="prov_state"value="IL">IL</option> 87<option name="prov_state"value="IA">IA</option> 88<option name="prov_state"value="KS">KS</option> 89<option name="prov_state"value="KY">LA</option> 90<option name="prov_state"value="ME">ME</option> 91<option name="prov_state"value="MD">MD</option> 92<option name="prov_state"value="MA">MA</option> 93<option name="prov_state"value="MI">MI</option> 94<option name="prov_state"value="MN">MN</option> 95<option name="prov_state" value="MS">MS</option> 96<option name="prov_state"value="MO">MO</option> 97<option name="prov_state"value="MT">MT</option> 98<option name="prov_state"value="NE">NE</option> 99<option name="prov_state"value="NV">NV</option> 100<option name="prov_state"value="NH">NH</option> 101<option name="prov_state"value="NJ">NJ</option> 102<option name="prov_state"value="NM">NM</option> 103<option name="prov_state" value="NY">NY</option> 104<option name="prov_state"value="NC">NC</option> 105<option name="prov_state" value="ND">ND</option> 106<option name="prov_state" value="OH">OH</option> 107<option name="prov_state"value="OK">OK</option> 108<option name="prov_state" value="OR">OR</option> 109<option name="prov_state" value="PA">PA</option> 110<option name="prov_state"value="RI">RI</option> 111<option name="prov_state"value="SC">SC</option> 112<option name="prov_state"value="TN">TN</option> 113<option name="prov_state" value="TX">TX</option> 114<option name="prov_state"value="UT">UT</option> 115<option name="prov_state" value="VT">VT</option> 116<option name="prov_state"value="VA">VA</option> 117<option name="prov_state"value="WA">WA</option> 118<option name="prov_state" value="WV">WV</option> 119<option name="prov_state" value="WI">WI</option> 120<option name="prov_state" value="WY">WY</option> 121</select> 122<br><br> 123<?php 124/* echo "<SELECT>"; 125 foreach ($prov_state as $key => $value) { 126 $b = $key + 1; 127 echo "<OPTION value=" . $b . " >" . $value . "</OPTION>\n"; 128} 129 echo "</SELECT>"; 130 echo "<br>"."<br>";*/ 131 132 133 /* loop that displays the form label3 */ 134 echo "<form action='checkblank_.php' method='post'>"; 135 foreach($labels3 as $field => $labels3) 136{ 137 echo "<div class='field'><label for='$field'>$label3</label> 138 <input id='$field' name='$field' type='text' 139 size='50%' maxlength='65' /></div>\n"; 140 } 141 ?> 142 143 <h2>Please choose what do you want to repair.</h2> 144<input type="radio" name="repair" value="Roofing">Roofing 145<input type="radio" name="repair" value="Plumbing">Plumbing 146<input type="radio" name="repair" value="Window and Door">Window and Door 147<input type="radio" name="repair" value="Flooring and Carpet">Flooring and Carpet 148<input type="radio" name="repair" value="Fence and Deck">Fence and Deck 149<input type="radio" name="repair" value="Another">Another 150<br><br> 151 152 <div id='submit'> 153 <input type='submit' value='submit'></div> 154 155 156 157</form> 158</body> 159</html> 160

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

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

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

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

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

guest

回答2

0

PHP

1//foreach($labels1 as $field=> $labels1) 2 foreach($labels1 as $field=> $label1)

二つ目と三つ目も同様です。

またこのforeach文の意味は、

$fieldとして入力されたデータ$labels1を受け取り、$labels1以上であれば次のステップへという解釈で問題ないでしょうか?

違います。
$labels1の各キーと値のセットを、キー$field、値$label1として受け取り、順繰りに処理していくという意味です。

詳しくは、マニュアル等で確認ください。
http://php.net/manual/ja/control-structures.foreach.php

投稿2017/04/19 21:00

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

foreach文の意味は配列の要素数分だけループを回します。
つまり$labels1、$labels2、$labels3は配列である必要があります。
$labels1 = array('a' => 'abc');
とありましたら、'a'がキー名、'abc'が値になります。
キー名はその値を使用したい場合に使用する名前みたいなものです。
echo $labels1['a'];
とした場合、
abc
と出力されます。
foreach($labels1 as $field => $label1) {}
というforeach文であれば、前記の$labels1をそのまま用いて説明しますと、$fieldにはaが入り、$label1にabcが入ってます。
それを配列(この場合は$labels1)の要素数分だけ順番に最後まで繰り返します。

ソースコードはこのような感じでいかがでしょうか?
$labels1、$labels2、$labels3が見当たりませんでしたので、コード中に適当に作成してますので、必要に応じて置き換えるか削除してください。

<html> <head> <style type='text/css'> <!-- form { margin: 1.5em 0 0 0; padding: 0; float: center; } .field {padding-bottom: 1em;} label { font-weight: bold; float: left; width: 20%; margin-right: 1em; text-align: right; } #submit { margin-left: 35%; } --> </style> </head> <body> <h2>Please fill up this form below</h2> <?php /* Script name: process_form.php (1-1) * Description: Script displays all the information * passed from a form. */ echo "<ol>"; foreach($_POST as $field => $value) { echo "<li> $field = $value</li>"; } echo "</ol>"; echo "<form action='repair.php'method='POST'>"; /* loop that displays the form label1*/ echo "<form action='checkblank_.php' method='post'>"; //$labels1は適当です。書き換えてください。 $labels1 = array('$fieldの内容' => '$label1の内容'); foreach($labels1 as $field=> $label1) { echo "<div class='field'><label for='$field'>$label1</label> <input id='$field' name='$field' type='text' size='50%' maxlength='65' /></div>\n"; } /* loop that displays the form label2 */ echo "<form action='checkblank_.php' method='post'>"; //$labels1は適当です。書き換えてください。 $labels2 = array('$fieldの内容' => '$label2の内容'); foreach($labels2 as $field=> $label2) { echo "<label for='$field'>$label2</label>\n"; } /* loop that displays the prov */ ?> <select name="prov_state"> <option value="NULL">Choose One</option> <option value="ON">ON</option> <option name="prov_state"value="QC">QC</option> <option name="prov_state"value="NS">NS</option> <option name="prov_state"value="NB">NB</option> <option name="prov_state"value="MB">MB</option> <option name="prov_state"value="BC">BC</option> <option name="prov_state"value="PE">PE</option> <option name="prov_state"value="SK">SK</option> <option name="prov_state"value="AB">AB</option> <option name="prov_state"value="NL">NL</option> <option name="prov_state"value="NT">NT</option> <option name="prov_state"value="YE">YE</option> <option name="prov_state"value="NU">NU</option> <option name="prov_state"value="AL">AL</option> <option name="prov_state"value="AK">AK</option> <option name="prov_state"value="AZ">AZ</option> <option name="prov_state"value="AR">AR</option> <option name="prov_state"value="CA">CA</option> <option name="prov_state"value="CO">CO</option> <option name="prov_state"value="CT">CT</option> <option name="prov_state"value="DE">DE</option> <option name="prov_state"value="FL">FL</option> <option name="prov_state"value="GA">GA</option> <option name="prov_state"value="ID">ID</option> <option name="prov_state"value="IL">IL</option> <option name="prov_state"value="IA">IA</option> <option name="prov_state"value="KS">KS</option> <option name="prov_state"value="KY">LA</option> <option name="prov_state"value="ME">ME</option> <option name="prov_state"value="MD">MD</option> <option name="prov_state"value="MA">MA</option> <option name="prov_state"value="MI">MI</option> <option name="prov_state"value="MN">MN</option> <option name="prov_state" value="MS">MS</option> <option name="prov_state"value="MO">MO</option> <option name="prov_state"value="MT">MT</option> <option name="prov_state"value="NE">NE</option> <option name="prov_state"value="NV">NV</option> <option name="prov_state"value="NH">NH</option> <option name="prov_state"value="NJ">NJ</option> <option name="prov_state"value="NM">NM</option> <option name="prov_state" value="NY">NY</option> <option name="prov_state"value="NC">NC</option> <option name="prov_state" value="ND">ND</option> <option name="prov_state" value="OH">OH</option> <option name="prov_state"value="OK">OK</option> <option name="prov_state" value="OR">OR</option> <option name="prov_state" value="PA">PA</option> <option name="prov_state"value="RI">RI</option> <option name="prov_state"value="SC">SC</option> <option name="prov_state"value="TN">TN</option> <option name="prov_state" value="TX">TX</option> <option name="prov_state"value="UT">UT</option> <option name="prov_state" value="VT">VT</option> <option name="prov_state"value="VA">VA</option> <option name="prov_state"value="WA">WA</option> <option name="prov_state" value="WV">WV</option> <option name="prov_state" value="WI">WI</option> <option name="prov_state" value="WY">WY</option> </select> <br><br> <?php /* echo "<SELECT>"; foreach ($prov_state as $key => $value) { $b = $key + 1; echo "<OPTION value=" . $b . " >" . $value . "</OPTION>\n"; } echo "</SELECT>"; echo "<br>"."<br>";*/ /* loop that displays the form label3 */ echo "<form action='checkblank_.php' method='post'>"; //$labels3は適当です。書き換えてください。 $labels3 = array('$fieldの内容' => '$label3の内容'); foreach($labels3 as $field => $label3) { echo "<div class='field'><label for='$field'>$label3</label> <input id='$field' name='$field' type='text' size='50%' maxlength='65' /></div>\n"; } ?> <h2>Please choose what do you want to repair.</h2> <input type="radio" name="repair" value="Roofing">Roofing <input type="radio" name="repair" value="Plumbing">Plumbing <input type="radio" name="repair" value="Window and Door">Window and Door <input type="radio" name="repair" value="Flooring and Carpet">Flooring and Carpet <input type="radio" name="repair" value="Fence and Deck">Fence and Deck <input type="radio" name="repair" value="Another">Another <br><br> <div id='submit'> <input type='submit' value='submit'></div> </form> </body> </html> コード

投稿2017/04/20 10:48

編集2017/04/20 11:06
yuabe

総合スコア143

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

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

toutou

2017/04/20 10:58

コードは<code>で包んでください。
yuabe

2017/04/20 11:06

失礼いたしました。 ありがとうございます。
YukaSaku

2017/04/20 15:44

とてもわかりやすいご回答をありがとうございました。おかげさまで、Warningがちゃんと取れました!! 今後ともよろしくお願いいたします!!!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問