[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"が表示されるべきだと
思っております。