foreach トラバーサルでエラーが発生するのはなぜですか?
ネチズンの投稿を見て、自分でも試してみたところ、華さんの言う通りにうまくいきましたが、理由はわかりません。アドバイスをお願いします。
$blog=array(
array(
"titledata"=>"titleMM",
"bodydata"=>"bodyMM"
),
array(
"titledata"=>"titleGG",
"bodydata"=>"bodyGG"
)
//エラー
foreach( $blog as $b)
{
$b['titledata']="BB"
}
print_r($ blog); //表示 Array ( [0] => Array ( [titledata] => titleMM [bodydata] => bodyMM ) [1] => Array ( [titledata] => titleGG [bodydata] = > bodyGG ))、期待した結果が得られません。
//正しい
for($i=0;$i
$blog[$i]['titledata']="title" ;
$blog[$i]['bodydata']="body";
}
print_r($blog);// 期待される結果を取得します: Array ( [0] => [タイトルデータ] => タイトル [ボディデータ] => ボディ ) [1] => 配列 ( [タイトルデータ] => タイトル [ボディデータ] => ボディ )
------解決策----------------------
理由は非常に簡単です、foreach( $ blog as $b) がコピーを取得します。コピーを書き換えても、元の
$blog=array( <br /> array( <br /> "titledata"=>"titleMM", <br /> "bodydata"=>"bodyMM" <br /> ), <br /> array( <br /> "titledata"=>"titleGG", <br /> "bodydata"=>"bodyGG" <br /> ) <br />); <br /><br />foreach($blog as &$b) <br />{ <br /> $b['titledata']="BB"; <br /> $b['bodydata']="CC"; <br />} <br />print_r($blog);