#目的
・foreachについて理解を深める
・foreachについての間違った知識をただす
#foreachを使用したコードの比較
例1
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
var_dump($arr);
?>
例1の出力
array(4) { [0]=> int(2) [1]=> int(4) [2]=> int(6) [3]=> &int(8) }
foreachしたら、配列の要素を1個ずつ取り出すことができるっていうイメージしかなかったから、$arrの値が更新される概念が全然なかった。なんなら$arrは空と思ってた
例2
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
var_dump($arr);
var_dump($value);
?>
例2の出力
array(4) { [0]=> int(2) [1]=> int(4) [2]=> int(6) [3]=> &int(8) } int(8)
foreachのループ処理で使用した$valueを出力すると、$arr[3]を出力している。ループ終了後は、最後の要素を参照している見たい
例3
<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
$value = $value * 2;
}
unset($value);
var_dump($arr);
var_dump($value);
?>
例3の出力
array(4) { [0]=> int(2) [1]=> int(4) [2]=> int(6) [3]=> int(8) } NULL
foreachループ終了後に、最後の要素を参照していた$valueをunset関数で囲むと、NULLになる
#まとめ
・foreachは、要素の数の分だけループ処理する
・foreachは、要素を1個ずつ取り出すイメージではなく、要素を1個ずつ参照しているイメージ
・foreach内でループ処理の受け皿になっていた変数は、最後の要素を参照する