知らなかったよ

マニュアルに書いてるじゃん。
http://www.php.net/manual/ja/control-structures.foreach.php

配列の内容自体を変更したいときにforeachで&指定ってできるのね。

<?php
$aa = array(
    'k1' => 'v1',
    'k2' => 'v2',
    'k3' => 'v3',
    'k4' => 'v4',
);
var_dump($aa);

foreach ($aa as &$a) {
    $a .= '!';
}
unset($a); // <= 最後の値に参照が残るのでこれ重要かも。。。
var_dump($aa);
?>

出力結果:
array(4) {
  ["k1"]=>
  string(2) "v1"
  ["k2"]=>
  string(2) "v2"
  ["k3"]=>
  string(2) "v3"
  ["k4"]=>
  string(2) "v4"
}
array(4) {
  ["k1"]=>
  string(3) "v1!"
  ["k2"]=>
  string(3) "v2!"
  ["k3"]=>
  string(3) "v3!"
  ["k4"]=>
  &string(3) "v4!"
}

今まで無駄をやってた感があるにゃ。