foreachでリファレンス

ループを抜けたら $item['hoge'] が空っぽになってしまってはまりました。

http://groundwalker.com/blog/2008/02/php_foreach.html

配列の各要素を書き換えたいとき、PHP5なら、&をつけることで、要素を一時変数にコピーせずに参照することができる。

ということらしく、以下のように書くのが正しいようです。

こう書くこともできるYO!! PHP 4もOKOK!!

foreach (array_keys($rows) as $key) {
    $row =& $rows[$key];
    $row['hoge'] = 'fuga'; //  1行で書いてもいいYO!!
}