foreachでつまった

<?php
$hoge = array(1,2,3,4,5,6,7);
print_r($hoge);
foreach ($hoge as $hogehoge) {
    $value = $value++;
}
print_r($hoge);
?>

とか書いて実行すると

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
)
Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
)

こうなって配列の内容を変更できない。
値のコピーでなくリファレンスを代入するといいらしい。

<?php
$hoge = array(1,2,3,4,5,6,7);
print_r($hoge);

//リファレンスを代入
foreach ($hoge as &$hogehoge) {
    $value = $value++;
}
print_r($hoge);
?>

これで実行。

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
)
Array
(
    [0] => 2
    [1] => 3
    [2] => 4
    [3] => 5
    [4] => 6
    [5] => 7
    [6] => 8
)

いけるじゃないか!と思ってたんだけど
foreachの終了後も$hogehogeは配列の最後を参照しっぱなし。
このコードでは問題無いけど、今書いてるのでひたすら悩んだ。。。
unset()で解除してやりましょう。

<?php
$hoge = array(1,2,3,4,5,6,7);
print_r($hoge);

//リファレンスを代入
foreach ($hoge as &$hogehoge) {
    $value = $value++;
}

//参照の解除
unset($hogehoge);

print_r($hoge);
?>