- ベストアンサー
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(アップデータしたばかり)です。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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"; } なら大丈夫でしょう。
その他の回答 (2)
- php504
- ベストアンサー率42% (926/2160)
各ループで配列を表示すると$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>
2回目のが &$value になってるのは?
補足
ありがとうございます。 php4でなかった機能&のテストをしています。 &を取ると<<>>はつきません。 というより <<>>を付けるのが目的でなく&の機能を調べるのが目的です。 具体的にどういうコードにすればよいでしょうか?
お礼
できました。 ありがとうございます。