配列をforeachで回すときに
その配列に値を代入したいときがある。
<?php $array[0] = 0; $array[1] = 0; $array[2] = 0; print_r($array); foreach($array as $value) { print_r("変換前: " . $value . "\n"); $value = 2; print_r("変換後: " . $value . "\n"); } print_r($array); ?>
でも結果はこうなる。
Array
(
[0] => 0
[1] => 0
[2] => 0
)
変換前: 0
変換後: 2
変換前: 0
変換後: 2
変換前: 0
変換後: 2
Array
(
[0] => 0
[1] => 0
[2] => 0
)ループ内では値は変換されているようだけど、
ループ前とループ後では中身が同じになってしまっている。
たぶん
というわけで、参照を利用したforeachにすると
<?php $array[0] = 0; $array[1] = 0; $array[2] = 0; print_r($array); foreach($array as &$value) { print_r("変換前: " . $value . "\n"); $value = 2; print_r("変換後: " . $value . "\n"); } print_r($array); ?>
Array
(
[0] => 0
[1] => 0
[2] => 0
)
変換前: 0
変換後: 2
変換前: 0
変換後: 2
変換前: 0
変換後: 2
Array
(
[0] => 2
[1] => 2
[2] => 2
)値がしっかり変更されております。
foreachの配列を書き変えたいときは
参照を使いましょう。