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

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

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

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

Q&A

解決済

1回答

883閲覧

foreachの結果が異なる理由が知りたいです。

kawanos

総合スコア11

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

0グッド

0クリップ

投稿2019/07/04 08:28

編集2019/07/04 08:30

PHPを独学中で、初歩的な質問になりますがご了承ください。
下記のコードの結果が異なる理由が知りたいです。
知恵をお貸しいただけると幸いです。宜しくお願いします。

foreachは配列を1周したらループが終了するという認識ですが、例2の場合はvar_dumpで確認すると、2周、例3の場合は3周されているようです。

<例2の結果>
3array(3) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" } 3array(4) { [0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" [3]=> string(1) "3" }

該当のソースコード

例1)

$y = array('1','2');

foreach($y as $key); //←セミコロン
$y[] ='3';
echo $y[2];
//3

例2)

$y = array('1','2');

foreach($y as $key){ //←波カッコ
$y[] ='3';
echo $y[2];
}
//33→3が2個になる。var_dumpで結果を見てみると2周されているようです。

例3)

$y = array("1","2");
$y[] ="3"; //←配列を外に出した
foreach($y as $key){
echo $y[2];
}
//333→3が3個になる。var_dumpで結果を見てみると3周されているようです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

foreachは配列を1周したらループが終了するという認識ですが、例2の場合はvar_dumpで確認すると、2周、例3の場合は3周されているようです。

いえ、どちらもループは配列を一周しているだけです。中で出力しているのがecho $y[2];と、ループで回っているものを使っていないので、配列の個数だけ同じものが出力されます


(本題ではありませんが、foreachで配列を回す途中にその配列を書き換えると、動作がわかりにくくなるので、やらないほうがいいでしょう。)

投稿2019/07/04 08:35

maisumakun

総合スコア145184

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

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

maisumakun

2019/07/04 08:36

例1の場合も、ループは;で終わっているので、何もしないまま配列を一周だけして、ループとは無関係に1回だけ$y[2]が出力されています。
kawanos

2019/07/04 08:44

早急なご回答ありがとうございます! 配列の個数だけ→今回は配列が2つなので(arrayの分と、追加分)で33ということですか? 理解力が乏しくてすいません(>_<)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問