LoginSignup
5
2

More than 3 years have passed since last update.

PHP foreachで回した配列を更新する

Last updated at Posted at 2019-06-07

PHP foreachで回した配列を更新する

基礎の基礎という感じですが、初投稿も兼ねてforeachで回した配列の要素を更新する方法についてメモします。

例)数値型を持つ配列$arrayの各要素をforeachで取り出し、各要素に+1する

以下はNGケースです。

$array = [1, 2, 3];

foreach($array as $value){
    $value += 1;
}

print_r($array);

/* 実行結果 → 各要素に+1されない
Array
(
[0] => 1
[1] => 2
[2] => 3
)
*/

上記のコードでは配列を更新できません。foreachの仕様として、配列要素のコピーがforeach内の変数に格納されるため、更新ができないのです。

foreachの変数を利用して配列要素を更新するためには、参照渡しをする必要があります。
手順は以下2点です。
・更新したいforeach変数の頭に&を付与 (参照渡し)
・更新処理の後にunset(変数名)を記述 (参照渡しの解除)

以下はOKケースです。

$array = [1, 2, 3];

foreach($array as &$value){       //(参照渡し)
    $value += 1;
}
unset($value);                   //(参照渡しの解除)

print_r($array);

/* 実行結果
Array
(
[0] => 2
[1] => 3
[2] => 4
)
*/

まとめ

foreach変数に参照渡しをすることで、配列要素とforeach変数がリンクするので、配列要素の更新が可能になります。
この点は少し注意が必要ですが、foreachを抜けた後も参照渡しをした変数には配列の最後の要素が入ったままなので、unset()で参照渡しの解除をしています。

5
2
0

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
5
2