for文の使い方について
解決済
回答 2
投稿
- 評価
- クリップ 0
- VIEW 747
PHPを学習している初心者です。
for文の理解を確認したく、質問する次第です。
以下のように、for文を使いながら都道府県のドロップダウンを作っています。
質問
①各行(select開始タグ、optionタグ、select終了タグ)ごとに変数$htmlがあるが、これはselectタグを使う場合は通常、各行で変数に入れていくものなのか?
②name=\"prefecture\" の「\」を置く規則は何か? 調べてみると、文字列を囲む""と認識されないように、とあるが、どのように使えば良いのかがわからない。
<?php
$PrefectureList = array(
"北海道","青森県","岩手県","宮城県","秋田県",
"山形県","福島県","茨城県","群馬県","栃木県",
"埼玉県","千葉県","東京都","神奈川県","新潟県",
"富山県","石川県","福井県","山梨県","長野県",
"岐阜県","静岡県","愛知県","三重県","滋賀県",
"京都府","大阪府","兵庫県","奈良県","和歌山県",
"鳥取県","島根県","岡山県","広島県","山口県",
"徳島県","香川県","愛媛県","高知県","福岡県",
"佐賀県","長崎県","熊本県","大分県","宮崎県",
"鹿児島県","沖縄県");
$html = "<SELECT name=\"prefecture\" >\n";
for ( $i = 0; $i <= count($PrefectureList) - 1 ; $i++)
{
$html .= "<OPTION value=\"$i\">$PrefectureList[$i]</OPTION>\n";
}
$html .= "</SELECT>\n";
print $html;
?>
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
+1
質問1:別に変数へ入れず、1行ごとにprint
していっても特に問題ありません。
質問2:""
の中に別の"
を書く場合、そこで文字列が終わりだと認識されないように、\"
と書く必要があります。なお、HTMLは一重引用符でも書けるので、<select name='prefecture'>
とすればエスケープは不要となります。
なお、SELECT
やOPTION
といったHTMLタグを大文字で書くのは、古い慣習に属します(HTML5 では全部小文字で書くのが主流です)。何かを参考にされているのでしたら、古い情報でないか確認することをおすすめします。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
checkベストアンサー
0
まず、質問内容はfor文のことではないですね。
①各行(select開始タグ、optionタグ、select終了タグ)ごとに変数$htmlがあるが、これはselectタグを使う場合は通常、各行で変数に入れていくものなのか?
コードをよく見てください。
最初の $html はそのあとにすぐ = が続いていますが、2回目以降は .= と ピリオドイコールになっています。
= は、変数に値を代入(入れ替え)で、.= は、連結を意味します。
例えば、次のようなコードの結果、変数 $a の中身は "ABC" になります。
$a = "A";
$a .= "B";
$a .= "C";
質問にあるコードの場合、まず変数$htmlにHTML文を作成して、最後にprint文で出力していることになります。
やり方は人それぞれですが、変数$htmlに作成せずとも、都度出力してもよいです。
print "<SELECT name=\"prefecture\" >\n";
②name=\"prefecture\" の「\」を置く規則は何か? 調べてみると、文字列を囲む""と認識されないように、とあるが、どのように使えば良いのかがわからない。
調べた結果通りですね。
つまりPHPで文字列は、"~" で表されますが、途中にダブルクォーテーションが入ると正しく認識できなくなります。
"~"~" ← これはダメ
正しく認識させるために " の前に \ を入れる必要があります。
"~\"~"
これをエスケープ処理といいます。
またPHPの場合、文字列はシングルクォーテーションで表すこともできます。
'~'
この場合はシングルクォーテーションで囲った中身がそのまま認識されます。
従って、
'~"~'
という書き方ができます。
詳しくはマニュアルを参照してみてください。
https://secure.php.net/manual/ja/language.types.string.php
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.38%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
2016/04/08 15:03