• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:配列の要素の値をループ中に変更して確認したいのですが、下記やり方では、)

なぜ上のforeach文と下のforeach文の結果が異なるのか?

このQ&Aのポイント
  • 配列の要素をループ中に変更して結果を確認したいが、上のforeach文と下のforeach文の結果が異なる。
  • 一つ目のforeach文で要素の値が更新されるのは、foreach文が終了した瞬間。値はすぐに更新されているが、foreach文の処理は既にスタートしているため、途中での変更は反映されない。
  • 上のforeach文と下のforeach文の結果が異なる理由がよく分からないので、詳しい人に教えてほしい。

質問者が選んだベストアンサー

  • ベストアンサー
noname#256686
noname#256686
回答No.1

上のforeachでは、$arr[$key]の内容を$valにコピー(値渡し)しているに過ぎないからです。 C言語でいうポインタ(参照渡し)ではありません。 上のforeachでは、下記のような流れになります。 1)$arr[$key]の内容を$valにコピー。 2)$arr[$key]の内容を"-{$val}-"に書き換え。 3)$valを表示。 4)$keyをインクリメントして1)へ戻る よって、上のforeachでは書き換え前の値が表示されます。 下のforeachでは、書き換えられた後の配列を表示しているため、2)でセットした値が表示されるはずです。

re999
質問者

お礼

よく分かりました。ありがとうございます!

すると、全ての回答が全文表示されます。

関連するQ&A