🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

PHP

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

Q&A

解決済

4回答

5139閲覧

php「for文の中にfor文」で1、21、321を出力するプログラムの処理の流れがわからない

ntk__7__ksn

総合スコア14

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

PHP

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

0グッド

0クリップ

投稿2021/01/07 08:12

#該当のソースコード

php

1<?php 2// 以下をfor文を使用して表示してください。 3 4// 1 5// 21 6// 321 7 8for($a = 2; $a >= 0; $a --) { 9 for($b = 3; $b >= $a + 1; $b --) { 10 echo $b - $a; 11 } 12 echo "\n"; 13} 14 15?>

#前提・実現したいこと
1、21、321を出力するプログラムを作成しています。
この記述で1、21,321は出力されるのですが、どうして 1、21,321が出力されるのか、どういう流れで出力されるのかいまいちよくわかりません。

#わかっていること

for($a = 2; $a >= 0; $a --)

$aは2
0以上2以下
$a--は$a=$a-1(処理が終わったら-1をする)

for($b = 3; $b >= $a + 1; $b --)

$bは3
$b--は$b=$b-1(処理が終わったら-1をする)

$b >= $a + 1

この記述はよくわかりません。
3>=2+1ということでしょうか?

わかる方がいらっしゃいましたらご教授をよろしくお願い致します。

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

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

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

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

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

m.ts10806

2021/01/07 08:18

どこで拾ってきたコードなのでしょうか
m.ts10806

2021/01/07 10:36

で、あればそのカリキュラムの発行元、もしくは講師に聞くべきでは。 ここで得られる回答はおおよそ実務に近いことが多く、学校の範疇を軽々と飛び越えます。
ntk__7__ksn

2021/01/07 11:22

そうですね。 コメントしていただきありがとうございます。 参考になります。
guest

回答4

0

あくまで「式」です。
こうすれば理解しやすいのでは。

php

1$b >= ($a + 1)

投稿2021/01/07 08:19

m.ts10806

総合スコア80875

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

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

ntk__7__ksn

2021/01/07 08:45 編集

ありがとうございます。 ではこのプログラムだと$b >= ($a + 1)のところは$bは3で$aは2なので、 3 >= 2+1という式になるのでしょうか?
m.ts10806

2021/01/07 10:35

ループ内の変数は常に変動し続けるのでデバッグで確かめてください。
m.ts10806

2021/01/07 10:37

今回覚えるべきは「実行の優先順位」と「式」です。
ntk__7__ksn

2021/01/07 11:26

畏まりました。 確認してみます。 ありがとうございます。
guest

0

ベストアンサー

投稿2021/01/07 10:30

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

ntk__7__ksn

2021/01/07 11:20

こういうのもあるんですね!! これは無料で使えるものですか?
退会済みユーザー

退会済みユーザー

2021/01/08 03:17

提示のサイトは無料で公開されていますね。 ただ、普通は自前のデバッグ環境を使用するので、さっさと整えてしまう事をオススメします。
ntk__7__ksn

2021/01/12 06:38

そうなんですね。 ありがとうございます。
guest

0

二重ループがマストならこんな感じでは?

PHP

1for($i=1;$i<=9;$i++) { 2 for($j=$i;$j>0;$j--) { 3 echo $j; 4 } 5 echo "<br>\n"; 6}

投稿2021/01/07 08:35

yambejp

総合スコア116661

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

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

ntk__7__ksn

2021/01/07 10:21 編集

なるほど、こういう書き方もあるんですね!! 勉強になります。 一つご質問なのですが、二つ目のfor文の for($j = $i; $j > 0; $j--) は$j = $i ということは$jも1ということですよね? ということは $j > 0 は$bは1なので 1>0 という事でしょうか? $j-- は処理が終わったら-1するという事であっていますでしょうか?
yambejp

2021/01/07 10:35

$jは$iからはじまって1までデクリメントするということです
ntk__7__ksn

2021/01/07 11:25

なるほど、だからこのプログラムを実行すると最後の数字が全部1で終わるんですね!
guest

0

どういう流れで処理され
1
21
321

と表示されるのか,,,

php

1 2//コードはこちら 3 4for($a = 2; $a >= 0; $a --) { 5 for($b = 3; $b >= $a + 1; $b --) { 6 echo $b - $a; 7 } 8 echo "\n"; 9} 10 11?>

まず下記のfor文の記述について

//1つ目のfor文 for($a = 2; $a >= 0; $a --)

変数aに2を代入。 0以上a以下の時実行。 $a--は2回目の時にaを**-1**する(その為1回目の時は無視して次に進む)

//2つ目のfor文 for($b = 3; $b >= $a + 1; $b --)

変数bに3を代入。 a+1をした数字以上b以下の時実行。 $a--と同様2回目の時にbを**-1**する(その為1回目の時は無視して次に進む)

上記が理解できたら次に実行の流れを説明します。

1つ目のfor文で
$a=2、0より2のほうが大きいので2つ目のfor文へ
$b=3、aが1でbが3(3 >= 2+1)なので条件式もクリアしているので次のechoへ
$b-$aなので3-2をして、1。
2つ目のfor文に戻り、$b--があるので、3-1をして**$b=2になる。
条件式に当てはめると、 2 >= 2+1 なので、2つ目のfor文が終わり、先ほどの$b-$aで
1となったので1**を出力し、echo "\n";とあるので1の後に改行をして終わる。

for文は条件式に当てはまる時まで繰り返し処理されるのでまた1つ目のfor文に行き上記と同様の流れで処理されていく。
注意、$a=2ですが、2回目なので$a--が適用され2-1になり、$a=1になります。

投稿2021/01/15 05:12

ntk__7__ksn

総合スコア14

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

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

kaina

2021/01/15 05:29

3名の方にそれぞれ参考になったと思われる回答を貰っているにも拘らず 自分で投稿した回答をベストアンサーに選んでいる為、低評価を付けました。 以下のURLの「4-1. ベストアンサーを選びましょう」部分をよく読んで下さい。 https://teratail.com/help/question-tips
ntk__7__ksn

2021/01/15 07:36

修正致しました。 以後気をつけます。
kaina

2021/01/15 07:44

確認いただけたようですので、低評価取り下げました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問