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

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

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

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

Q&A

2回答

1115閲覧

初心者です。phpにおける入れ子のあるfor文について

shohei0426

総合スコア1

PHP

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

0グッド

0クリップ

投稿2022/01/02 12:06

for ($i = 1; $i <= 9; $i++) {
if ($i <= 5) {
for ($j = 4; $j >= $i; $j--) {
echo "*";
}
for ($n = 1; $n <= $i; $n++) {
echo $n;
}
for ($k = $n -2; $k >= 1; $k--) {
echo $k;
}
echo "<br>";
}
}
?>

上記を出力すると、以下のようになります

// ****1
// ***121
// **12321
// *1234321
// 123454321

ここからが質問です。
$i = 1 の時、
$j = 4だから'****'が出力される。
$n=1であり、$n<=$iのため、1が出力される。
$k は$n-2であり、$k>=1であるため、 この時出力されない。
よって、****1

$i =2 の時
$j=3だから'***'が出力される。
$n=1であり、$n<=$iのため1と2が出力される。
$k=$n-2だから1-2と2-2はいずれも$k >= 1;を満たしていないため、
この時出力されない。
よって、***12 になると思うのですが、実際みてみると
$i=2の時に***121なっているかと思います。
この末尾の1はどこから来たのでしょうか。

事実上、私の理解が間違っているのですが
どこの理解が間違っているのかわかりません。

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

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

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

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

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

shohei0426

2022/01/03 02:32

ご教示ありがとうございます!!
BeatStar

2022/01/03 04:28

解決したのならBAを選びましょう。今のままでは未解決扱いです。 それと、質問は編集できるので編集しましょう。
m.ts10806

2022/01/03 09:26

質問は編集できますので、対応してからご返信を。
kei344

2022/01/03 11:05

まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。
guest

回答2

0

$i == 2のとき、for ($n = 1; $n <= $i; $n++) {のループで、$nは1から始まってインクリメントして行って、$n <= $i が偽になったときにこのループは終了します。ということは、ループ終了時の$n$iより1大きい数すなわち3です。

そしてfor ($k = $n -2; $k >= 1; $k--) {を実行するとき、$kには$n - 2すなわち1が代入されますね。$k >= 1の条件は真となるのでecho $k;が実行され1が出力されます。

投稿2022/01/02 12:30

itagagaki

総合スコア8402

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

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

shohei0426

2022/01/03 02:33

for文を満たすことが出来なかった数値で次のfor文に出力されるのですね。 解決しました!本当にありがとうございます
guest

0

ループを抜けた直後は for 文の終了条件を満たした状態です。
つまり

for ($x=1; $x<=100; $x++) { echo '*'; } echo $x;

この場合、最後の出力は 101 になる、て話です。
実際のプログラミングではこういった書き方は見ない気もします。
学習用のコードでしょうが、ちょっと混乱しちゃいますかね。

投稿2022/01/02 12:22

takasima20

総合スコア7464

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

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

maisumakun

2022/01/02 21:31

> 実際のプログラミングではこういった書き方は見ない気もします。 foreachを参照で回した後に、参照をunsetせず同じ変数を使ってしまって配列も書き変わる、という事故は時折見受けられます。
shohei0426

2022/01/03 02:34

>>>ループを抜けた直後は for 文の終了条件を満たした状態です。 これで理解出来ました! 本当にありがとうございます
takasima20

2022/01/03 11:01

> maisumakunさん バグになりがちですよね~ > shohei0426さん (・∀・)b
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問