foreach 中に変更するべき要素を見つけて取っておきたい
単純化すると、配列に入っているオブジェクトを舐めて、
PHPの参照が使いにくい件について - 神様なんて信じない僕らのために
条件を満たすものを取り出してそれを後で変更したい、みたいなコードを書く。
とりだしたもののオブジェクトの状態を変更。
で、大本の配列を回してみたら中身かわってねえ……。
要するにPHPの参照の挙動なんですが、
なんでこんなことに。
foreach で参照とると地雷があったりするので(気づいてらっしゃるっぽいけど),こういう場合は,キーを保存してくのがわりとよくやるやり方かな.
<?php $hoge_list = array( array('Hoge'=>array('value'=>100)), array('Hoge'=>array('value'=>101)), array('Hoge'=>array('value'=>102)), array('Hoge'=>array('value'=>103)), array('Hoge'=>array('value'=>104)), ); echo "----- Before -----\n"; $select_hoge_key = null; foreach ($hoge_list as $key => $hoge) { echo $hoge['Hoge']['value']."\n"; if ($hoge['Hoge']['value'] == 100) { $select_hoge_key = $key; // キーを保存 } } $hoge_list[$select_hoge_key]['Hoge']['value'] = 999; echo "----- After -----\n"; foreach ($hoge_list as $hoge) { echo $hoge['Hoge']['value']."\n"; }
PHPはオブジェクト以外基本的に値渡しだし,参照周りは色々ドロドロしてるし,スコープもすごい(w)から,こういう方向のほうが安全かもですね.
あ,望んでいることが違ったらごめんなさいですけど.