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」には配列の最後の要素に対する参照が設定されたままのため、その後のプログラムで間違って要素の値を書き換えないように変数の割り当てを明示的に解除しています。

サンプルプログラム

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

sample10-1.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;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文で配列要素の値を変更する

PHP入門の他の記事を見てみる

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)