LoginSignup
1
2

More than 3 years have passed since last update.

【備忘録】PHPのforeachについて考えてみる

Posted at

目的

・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内でループ処理の受け皿になっていた変数は、最後の要素を参照する

1
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2