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

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

ただいまの
回答率

90.61%

  • PHP

    19882questions

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

<option></option>を「' '」で囲む理由

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 649

t10702th

score 10

前提・実現したいこと

プログラミング初心者です

progateというプログラミング学習サイトでフォームの作成を学習しているのですが、一部理解できない点があります。

理解できていない点


for文と文字列の連結を用いて、6から100までのoptionをechoさせようとしているのですが、
①<option></option>を「'   '」でそれぞれ囲まなければいけない理由
②"'.$i.'"のように「"  "」と「'  '」で二重で囲まないといけない理由
の2つが理解できていません。

ソースコード


<?php 
        for($i=6; $i<=100; $i++){
              echo '<option value="'.$i.'">'.$i.'</option>';
         }
    ?>

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

+5

<option></option>を「'   '」でそれぞれ囲まなければいけない理由 
プログラムで扱えるデータには、数値、文字列などがあります。数値は0~9とせいぜい小数点と符号くらいで表現できますが、文字列にはどんな文字も書けます。なので、文字列とプログラムの他の部分を区別するために、文字列は引用符("または')で囲みます。

例えば、
echo ・・・・・・ PHPで何かを出力する命令
"echo" ・・・・・ echoという4文字の英字の文字列データ
のように区別します。

"'.$i.'"のように「"  "」と「'  '」で二重で囲まないといけない理由 
二重で囲んでいるわけではありません。分かち書きすると、
echo '<option value="'
     .$i
     .'">'
     .$i
     .'</option>'
; 
のように、5つの要素を「文字列連結演算子」.でつないだものです。
5つの要素とは、
'で囲まれた文字列、
変数$i
'で囲まれた文字列、
変数$i
'で囲まれた文字列、
の5つです。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/12 20:02

    ご回答いただきありがとうございます!5つの要素をつないでいるとのこと、理解することができました。
    1点、上記の「'で囲まれた文字列」でそれぞれ(")が(')によって囲まれていると思うのですが、これはなぜなのでしょうか?(")が必要となっている意味が理解できておりません。

    知識が乏しくすみませんが、よろしければ回答いただけますと幸いです。

    キャンセル

  • 2015/10/12 21:40

    htmlの文法上必要だから、ですね。省略してもたいていのwebブラウザは解釈できますが、文法上正しくなくなりますし、正しい文法を前提とした何かのプログラムで問題が起きる可能性があります。

    キャンセル

  • 2015/10/12 22:22

    HTMLタグの属性(value=とか、href=とか)の値は引用符で囲む決まりになっています。二重引用符でも一重引用符でもいいですが、よく見かけるのは二重引用符です。

    キャンセル

  • 2015/10/12 23:57

    お二方ご回答いただきありがとうございました!
    HTML上の決まりなのですね。意識せず("")を使っていました。
    今後はルールとしてしっかり覚えようと思います。
    ありがとうございました!

    キャンセル

checkベストアンサー

+2

'<option value="'.$i.'">'.$i.'</option>'の部分が一つの文字列を形成しているわけではありません。分解すると、下記のようになります。
<?php
for ($i = 6; $i <= 100; $i++) {
  echo
    '<option value="' // <option value=" という文字列
    . // 文字列結合演算子
    $i // 数値 $i を表現する文字列 (文字列結合演算子により自動変換)
    . // 文字列結合演算子
    '">' // "> という文字列
    . // 文字列結合演算子
    $i // 数値 $i を表現する文字列 (文字列結合演算子により自動変換)
    . // 文字列結合演算子
    '</option>' // </option> という文字列
  ;
}
'<option value="''…'と引用符(')で囲まれているのは表示したい文字列「<option value="」の中に二重引用符(")があるからです。"…"と二重引用符(")で囲んでしまうと、エスケープしない限り使えません。'">'も同じ理由です。最後の'</option>'は引用符(')でも二重引用符(")のどちらで囲っても問題ありませんが、統一性を考慮して引用符(')を使用しているのだと思われます。

そして、.は文字列結合演算子であり、前後の文字列を結合しているだけです。言ってみれば+の文字列版みたいなものです。$iは数値ですが、文字列結合演算子で結合するときは自動的に数値を表す文字列になります。上のはコードはやり過ぎですが、わかりやすくなるように演算子の前後は空白を開けて、
'<option value="' . $i . '">' . $i . '</option>'
と書くと理解がしやすくなると思います。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/10/12 19:58

    とてもご丁寧に回答いただき、ありがとうございます!
    "..." '...'がそれぞれ文字列を形成し、(.)がそれらをつないでいるとのこと、理解することがでいました!

    一点下記の内容について

    > '<option value="'が'…'と引用符(')で囲まれているのは表示したい文字列「<option valu
    > e="」の中に二重引用符(")があるからです。"…"と二重引用符(")で囲んでしまうと、エスケ
    > ープしない限り使えません。'">'も同じ理由です。

    「<option value="」と「'">'」が二重引用符(")を持っているのはなぜなのでしょうか?それぞれが「option value="」「">」という文字列を意味していることは理解できたのですが、(")が必要となる理由が理解できておりません。

    理解力が乏しくすみません・・

    キャンセル

  • 2015/10/12 20:53

    (")はPHPではなくHTMLのoptionタグの属性を指定するための括弧ですね。
    http://www.tohoho-web.com/html/memo/attr.htm
    上記の「クォーテーション」を参考にされるとよいかもしれません。

    元のご提示のコードは、PHPに以下のようなHTMLとして文字列を吐き出させたい意図のコードになります。
    <option value="6">6</option>
    <option value="7">7</option>
    <option value="8">8</option>

    <option value="100">100</option>

    蛇足ですが
    http://www.tohoho-web.com/html/memo/attr.htm
    にもあるように、HTMLの属性で数字のみならば(")は無くてもよいです。
    つまり以下のように書いても成り立ちます。

    <?php
    for($i=6; $i<=100; $i++){
    echo '<option value='.$i.'>'.$i.'</option>';
    }
    ?>

    ただあった方が変なミスもなくなるので、HTMLの属性の値は必ず("")で囲む癖を付けといて損はないです。

    キャンセル

  • 2015/10/12 23:54

    ご返信ありがとうございます!
    とてもご丁寧な内容で、理解することができました!
    思い返してみれば、確かにHTMLの記載の際にいつも("")をつけていました。すっかりその視点が抜け落ちてしまっていました。
    初歩的な内容にもかかわらず、お教えいただきありがとうございました!

    キャンセル

-4

文字列

 引用符
二重引用符 の部分を読んでください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.61%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    19882questions

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