できそうに見えて苦労したこと:PHPで配列の全要素を書き換える
配列の中身を全部一気に四捨五入したい。
これはダメなんだ・・・
$data = [
"a" => 200.678,
"b" => 405.999,
"c" => 900.304
];
foreach ($data as $value) {
$value = round($value, 1);
}
print_r($data); →配列宣言の通りに出力される。
ドンピシャな答えを発見!
foreach文で要素の値を変数に格納すると、値のコピーが変数に代入されます。
その為要素の値を利用することはできますが、要素の値を変更することは出来ません。
この値を変更するには「参照渡し」が必要です。PHPでは変数の前に&を付けるだけです。変数の前に&を付けることで値に対する参照を設定することができ、
要素の値を変更することが可能になります。このとき注意しなければならないのは、参照渡しを使ったら必ず
unset()
を使うことです。
これをしないと$valueの中にまだ配列の最後の要素の参照が入っているのでその後のプログラムで値を書き換えてしまって思わぬバグを生む可能性があります。
$data = [
"a" => 200.678,
"b" => 405.999,
"c" => 900.304
];
foreach ($data as &$value) {
$value = round($value, 1);
}
unset($value);
これで解決!