[PHP-users 155] foreach()と配列の内部ポインタの位置について
Naoaki Katsumata
php-users@php.gr.jp
Wed, 20 Jun 2001 20:21:46 +0900
かつまたと申します。
「foreachは、指定した配列自体に対してではなく、
そのコピーに対して処理を行う。このため、
each() 文のように配列のポインタ位置が変更されることはなく、
返される配列要素への変更は、元の配列には反映されない」
といった内容がマニュアルにあるのですが、これに関して
2点か質問させてください。
実験として以下のようなソースを書き、
php4で実行しました。
(読みづらかったらすいません。)
<?php
$bar = array("first"=>"one","second"=>"two","third"=>"three");
list(,$val1) = each($bar);
foreach($bar as $forval){
print("foreach:".$forval."<BR>");
// print("current:".current($bar)."<BR>");
}
if(list(,$val2) = each($bar)){
print($val2."<BR>");
}else{
print("FAlSE<BR>");
}
?>
ソース中にコメントアウトがあるのですが、それがあるないでその次のコード(if以下)
結果が異なります。
コメントアウトするとlist(,$val2) = each($bar)がFAlSEになります。
//をはずすとprint($val2."<BR>");のところで"one"が表示されます。
どうしてでしょうか?
そして、私の理解違いかもしれませんが、本来なら
if中の print($val2."<BR>");のところで最初のeach()の影響で"two"が表示されるべきだと
思っております。