優柔不断なプログラマの日記

思いつきでポチポチ書きます

(PHP)PHP5からの参照foreach

2007年08月01日 | プログラミング

PHP5からforeach($arr as &$value) と記述すると、配列要素の値を変更可能になっていますね。各要素に値を追加する場面で使用してみたのですが、なんかおかしい。最後の要素が書き換わるようです。 実験してみました。
テストソース1:
$test = array( 1, 2, 3, 4, 5);
foreach ($test as &$value) {}
foreach ($test as $value) {}
print_r($test);

結果1:
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 4
)

最初のforeachの$valueの参照ポインタが残ってるみたいです。つまり最初のforeachを抜けた時点で、$test[4]のポインタを指している。($value = &test[4])
テストソース2:
$test = array( 1, 2, 3, 4, 5);
foreach ($test as &$value) {}
$value=99999;
print_r($test);

結果2:
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 99999
)

うーん。理屈はなんとなく分かったけれど、意図しない結果を招きそうです。回避策を考えてみます。ポインタが残ってるようなので、クリアすればいいだろうということで。
テストソース3:
$test = array( 1, 2, 3, 4, 5);
foreach ($test as &$value) {}
unset($value);
$value=99999;
print_r($test);

結果3:
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
)

まあ、こんなところもPHPか。


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。