それはforeach()の仕様ですね。
foreach文で要素の値を変数に格納すると、値のコピーが変数に代入されます。
その為要素の値を利用することはできますが、要素の値を変更することは出来ません。
この値を変更するには「参照渡し」が必要です。PHPでは変数の前に&を付けるだけです。
変数の前に&を付けることで値に対する参照を設定することができ、
要素の値を変更することが可能になります。
ということで、以下のように書くことでforeach文でも値を書き換えることが出来ます。
$ score = array(70,80,90); foreach($score as &$value){ $value = $value * 0.9; } unset($value);
これでscoreの中身は63,72,81になっているはずです。
このとき注意しなければならないのは、参照渡しを使ったら必ず
unset()
を使うことです。
これをしないと$valueの中にまだ配列の最後の要素の参照が入っているので
その後のプログラムで値を書き換えてしまって思わぬバグを生む可能性があります。