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); ?>