foreach文で配列要素の値を変更する

広告

foreach文で要素の値を変数に格納すると、値のコピーが変数に代入されます。その為要素の値を利用することはできますが、要素の値を変更することは出来ません。キーを一緒に取得し配列変数に対して要素の値を変更することも可能ですが、次の書式を利用することもできます。

foreach (配列変数 as &変数){
  実行する処理1;
  実行する処理2;
}

変数の前に「&」を付けることで要素の値に対する参照を設定することができます。よって変数に対して新しい値を代入することで、要素の値を変更することが可能になります。

例えば次のように記述します。

$pricelist = array(80, 100, 120);

foreach ($pricelist as &$value){
  $value *= 1.05;
}
unset($value);

今回は要素の値に対する参照を取得し、各要素の値を1.05倍して再度格納しています。最後に「unset」関数を呼び出しているのは、foreach文が終了しても変数「value」には配列の最後の要素に対する参照が設定されたままのため、その後のプログラムで間違って要素の値を書き換えないように変数の割り当てを明示的に解除しています。

サンプルコード

では簡単なプログラムで試して見ます。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHPテスト</title>
</head>
<body>

<p>PHPのテストです。</p>

<p>
<?php
$pricelist = array(80, 100, 120);

foreach ($pricelist as &$value){
  $value *= 1.05;
}
unset($value);

foreach ($pricelist as $value){
  print $value.'<br />';
}
?>
</p>

</body>
</html>

上記のファイルをWWWサーバのドキュメントルート以下に設置しブラウザからアクセスすると次のように表示されます。

foreach文で配列要素の値を変更する

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。