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

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

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

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

Q&A

解決済

7回答

5511閲覧

for文でのカウンタ変数$i出力について

hiro0208

総合スコア75

PHP

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

1グッド

1クリップ

投稿2017/03/15 04:44

編集2017/03/15 04:45

イメージ説明
入力した終了値が、**echo $i;**で出力されるのはなぜでしょうか?
for文から外して、echoで入力した終了値がなぜ出力されるのかわかりません。for文の論理演算子も「<」を利用しているのに。
echo $end;
ならわかるのですが。。。。

php

1<!doctype html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>sample</title> 6</head> 7<body> 8<form action="" method="post"> 9開始値<input type="text" name="start" size="2"> 10終了値<input type="text" name="end" size="2"> 11<input type="submit" name="btn" value="送信"> 12</form> 13<?php 14if (isset($_POST['btn'])) { 15 $start = $_POST['start']; 16 $end = $_POST['end']; 17 for ($i = $start; $i < $end; $i++) { 18 echo $i . ', '; 19 } 20 //終了値 21 echo $i; 22} 23?> 24</body> 25</html>
gaia420👍を押しています

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

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

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

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

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

guest

回答7

0

PHPは、ループ内にスコープを作成しないので、for文で使用した変数iはループの外でも存在しているためです。

PHP

1<?php 2for ($i = 0; $i < 10; $i++) { 3 echo $i . "\n"; 4} 5echo "ループ外:" . $i;

投稿2017/03/15 04:54

編集2017/03/15 04:57
s8_chu

総合スコア14731

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

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

0

ベストアンサー

for分の動作を考えてみると良いと思います。開始を1,終了を3として考えてみると…
①処理1回目
$iに$start(つまり1)が入り、echo 1,されます。
②処理2回目
$i++により$iには2がはいり、echo 2,されます。
③処理3回目
$i++により$iには3がはいります。よって$i<$end(つまり3<3)に当てはまらなくなり、forの中のechoはされません。
④forの後のecho
③の時点で$iには3が入っていますので、echo3になります。

結果、出力結果は1,2,3となるのでしょう。

投稿2017/03/15 04:55

motuo

総合スコア3027

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

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

hiro0208

2017/03/15 05:02

ありがとうございます。わかりやすいです! $i < $end なら$i++という処理順番と思っていました。
guest

0

$iが10になるのはなぜか? ということですか

$end=10ですよね。条件式は「$i < $end」なので$iが10になった時ループは終了します。

ループ終了後に$iを出力しているので$i=10になります。

投稿2017/03/15 04:50

編集2017/03/15 04:51
takuntakun

総合スコア37

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

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

hiro0208

2017/03/15 04:54

なるほどですね。ありがとうございます。 10の前でループが終わるのではないのですね。 また<=10の場合は、10より大きくなったらループは終了という意味になるんでしょうか?
takuntakun

2017/03/15 05:02

そうですね。$i = 11になれば $i <= 10 は満たされないので終了になります。 あくまでも条件式が成り立っている間だけ繰り返されます。一度でも満たされなかった場合ループを抜けます。
guest

0

for文の2番目のパラメーターはループ条件です。
この条件が満たされている間、ループが継続します。
ということは、$i < $endですから、$iが$end未満な間ループします。
逆に言えば、$iは1ずつインクリメントさせているので、$iが$endと同じ値になればループ条件から外れるので抜けます。
なのでループを抜けた後のecho $i$endと同じ値になります。

投稿2017/03/15 05:02

ttyp03

総合スコア16996

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

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

0

for文から外して、echoで入力した終了値がなぜ出力されるのかわかりません

「終了値がなぜ出力されるのかわかりません」という認識が誤りです。

echo $i; ですので変数 i を echo しています。

i は for文で i++ とインクリメントされてます。

$i < $end の条件成立時は i=10 となっていますので、i が end と同じ値に達しただけです。

投稿2017/03/15 05:00

takito

総合スコア3111

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

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

0

蛇足ですが、この手の規則性のある処理はforで回す必要はありません

PHP

1$start = 1; 2$end = 10; 3print implode(", ",range($start,$end)); 4

投稿2017/03/15 04:56

yambejp

総合スコア114572

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

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

ttyp03

2017/03/15 05:04

質問の回答ではありません。 蛇足とするなら、回答を書いたうえで書くべきです。
yambejp

2017/03/15 05:11 編集

本題に対する回答は十分ついているから、その蛇足です 同じ結果を導くための別ロジックを提示することは十分回答だと思いますが? 逆にほかの誰も書かないので書いたのですが、お気に召さなかったのは 申し訳ないです
guest

0

for文の外で
//終了値
echo $i;

for文の$iは10で抜けているからではなのでしょうか???

投稿2017/03/15 04:54

A.Ichi

総合スコア4070

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問