みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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(アップデータしたばかり)です。

投稿日時 - 2007-06-09 12:30:32

QNo.3069348

暇なときに回答ください

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

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";
}
なら大丈夫でしょう。

投稿日時 - 2007-06-09 13:17:38

お礼

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

投稿日時 - 2007-06-09 13:33:53

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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>

投稿日時 - 2007-06-09 13:26:28

ANo.1

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

投稿日時 - 2007-06-09 12:56:11

補足

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

投稿日時 - 2007-06-09 13:14:46

あなたにオススメの質問