PHPのソースについて質問です。

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 842

ai5

score 38

<!-- for文を用いて6歳から100歳までをoptionで選べるようにしましょう -->
という問題があるのですが、なぜ、下記ソースのように'{$i}'>{$i}のような形になるのでしょうか?
valueが'{$i}'だとして、{$i}より小さいという意味がわからないです。

また、多数展開のecho "<option value = '1'>1</option>"変数展開も
どのような構造かよくわかりません。
詳しい方ご教授お願いします。

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

改行どうすればできますか?

echo "<option value = '1'>1</option>"変数展開

コードブロックこれでいいんですかね

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2016/08/23 00:54 編集

    編集ありがとうございます。最初の「```」部分を「```php」+改行にしていただくとさらに良いです。 記入エリアの右部分あたりにリアルタイムに結果が表示されていると思うので、そこを見ながら調整してください。

    キャンセル

  • kei344

    2016/08/23 01:08

    すいません、難しいことを言い過ぎたようです。「<br/> 」と「php」は削除しておいてください。

    キャンセル

  • te2ji

    2016/08/23 02:38

    > matobaa さん
    IDEのせいかとw

    キャンセル

回答 4

+5

どこまで質問者さんが理解できているのか分かりませんが・・・

先ずHTMLの記述ルールは知っていますでしょうか?

HTMLでは基本的に開始タグと終了タグのペアで1つの構成要素を表します。

例を1つ挙げると以下のイメージです。

<b>タグで囲まれたこの文字列は太文字で表示されるよっ!</b>

この例と提示したソースでは似ている箇所があると思います。
それに気づいたら現在の誤解もなくなると思いますよ。
(ちなみに<b>のタグはbold(太字)を表します。)

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/08/23 01:20

    はい、HTMLの記述ルールはわかります。

    <option value='{$i}'>{$i}</option>
    これはオプションタグを使っているのに、valueの変数?に'{$i}'>{$i}が
    使われてるのがよくわからないです。

    キャンセル

  • 2016/08/23 01:32

    > ai5さん
    文字列中の$iが、変数中の値に置き換わるのは分かりますよね?

    そうすると$iが6の場合に最終的に完成する文字列は以下となります。

    <option value = '6'>6</option>

    HTMLで見慣れた記述ルールですよね?

    「>」は不等号とかではなく、
    HTMLのタグの一部です。

    キャンセル

  • 2016/08/23 02:15

    はい、不等号と見間違えていました。

    キャンセル

  • 2016/08/23 02:35

    > ai5さん
    その誤解が解ければ後はforループの話となります。

    6から開始し$iが100までの間は、
    数値箇所だけを差し替えてひたすらechoでHTMLのoption要素を吐き出すといったことをしています。

    キャンセル

+4

echoは文字列を出力する命令です。

<?php
echo "文字列";   // 文字列

phpでは、変数を自動的に展開してくれる機能があります

<?php
$i=1;
echo "文字列$i";   // 文字列1

しかし以下の様な文字列だと、いったいどこまでが変数名なのかわかりません。
(一番長くマッチしたのが出力されるようです)

<?php
$i=1;
$ii=2; // 本当はこれを使いたい
$iii=3;
echo "文字列$iii";   //  文字列3  (一番長くマッチした $iii が使われた)
echo "文字列$iiii";   // どれかわからないのでエラー
echo "文字列$ii ii";   // 文字列2 ii  (スペースで区切られたので一番長い $iiが使われた)

なので、どこが変数名なのかを明示するために { } を使います

<?php
$i=1;
$ii=2;
$iii=3;
echo "文字列{$ii}i";    // 文字列2i
echo "文字列{$ii}ii";   // 文字列2ii

変数や特殊記号(変数を表すために使う記号や、変数を含む{``}など)以外はただの文字列として扱われます。

<?php
$i=1;
echo "abcdefghi{$i}ABCDEFGHI{$i}[]?*+";    // abcdefghi1ABCDEFGHI1[]?*+

すぐ上の例でもいくつか出てきましたが、それは通常演算に使われる記号でも同じです。

<?php
echo "<>!=#%&'(";  // <>!=#%&'(

という事で、
echo "<option value='{$i}'>{$i}</option>"; 
に含まれる',<,>などの記号もただの文字で比較や計算の記号ではありません。

※ 文字列中に $ や "そのものを文字として出力するための エスケープ文字というのがありますがそれは割愛しました。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

  • 2016/08/23 02:14

    for ($i = 6; $i <= 100; $i++)で繰り返した数字を
    "<option value='{$i}'>{$i}</option>"で6~100以下のオプションをecho
    しているという認識で合ってますか?

    キャンセル

  • 2016/08/23 02:14

    夜分遅くまでありがとうございました。
    もう少しでわかりそうな気がします。
    また、明日お願いします。

    キャンセル

  • 2016/08/23 07:57

    その認識であっています。
    echo "{$i}";
    だと、オプションではなく、ただの 6〜100がechoされます。

    キャンセル

+2

ややこしいことを抜きにしてこういう風に書けば分かりやすいのかなあと思いました。

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


PHP5.4.0以降もしくはショートタグがOnであれば

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


こうもかけます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

checkベストアンサー

0

このあたりを読んでみてください。似たコードも載っています。

【PHPのfor文で繰り返し処理(HTML埋め込みでもスッキリな書き方も)】
http://www.flatflag.nir87.com/for-273

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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