• ベストアンサー

foreachの疑問

<pre> <?php $a=array('x'=>1,'y'=>2,'z'=>3); foreach($a as $key=>$value) { print"$key:$value\n"; } foreach($a as $key=>&$value) { $value="<<$value>>"; } foreach($a as $key=>$value) { print"$key:$value\n"; } ?> </pre> の応答が x:1 y:2 z:3 x:<<1>> y:<<2>> z:<<2>> となり x:1 y:2 z:3 x:<<1>> y:<<2>> z:<<3>> となりません。 どうすればよいでしょうか? 環境はFedoraCore4-PHP5(アップデータしたばかり)です。

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.2

2番目のforeachで$valueは$a['z']への参照になっています。 3番目は foreach($a as $key=>$a['z']) { print"$key:$a[z]\n"; } と同じことになります。 3回目のforeachの前に参照をリセットして unset($value); foreach($a as $key=>$value) { print"$key:$value\n"; } なら大丈夫でしょう。

reiman
質問者

お礼

できました。 ありがとうございます。

その他の回答 (2)

  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

各ループで配列を表示すると$a['z']が変わっているのが確認できます。 <pre> <?php $a=array('x'=>1,'y'=>2,'z'=>3); foreach($a as $key=>$value) { print"$key:$value\n"; } foreach($a as $key=>&$value) { $value="<<$value>>"; } $i = 1; foreach($a as $key=>$value) { echo $i++ . "回目\n"; print_r($a); print"$key:$value\n"; } ?> </pre>

noname#39970
noname#39970
回答No.1

2回目のが &$value になってるのは?

reiman
質問者

補足

ありがとうございます。 php4でなかった機能&のテストをしています。 &を取ると<<>>はつきません。 というより <<>>を付けるのが目的でなく&の機能を調べるのが目的です。 具体的にどういうコードにすればよいでしょうか?

関連するQ&A

専門家に質問してみよう