PHPのforeachで2次元配列を回す時に、参照渡しができません。
2次元配列には1次元配列を要素として持っており、各1次元配列の値を参照渡しで直接書き換えることが出来ませんでした。
出来ない理由を教えて頂きたいです。具体的なコードは下記に示してあります。
この問題を調べるにあたり、PHPは変数名はシンボルテーブルに、変数の中身はzvalにと、別々のテーブルに分かれていることを知りました。
&を使った参照渡しは、シンボルテーブルに同じ実体を参照する変数を登録するのであって、ポインタを渡しているわけではないということまでは理解しています。
今回のことが不可能だとしても、なぜこのような結果になるのかが知りたいです。
どうぞよろしくお願いします。
php
1<?php 2 3echo phpversion(); 4// 7.0.11 5 6// 配列型の参照渡しができることを確認 7$ary1 = [1,2,3]; 8$ary2 = &$ary1; 9$ary2 = [0]; 10 11foreach ($ary1 as $val) echo $val; 12// 0 13 14foreach ($ary2 as $val) echo $val; 15// 0 16unset($ary1, $ary2, $val); 17 18// foreachで配列の要素が参照渡しができることを確認 19$ary1 = [1,2,3]; 20foreach ($ary1 as &$val) { 21 $val = 0; 22} 23unset($val); 24foreach ($ary1 as $val) echo $val; 25// 000 26unset($ary1, $ary2, $val); 27 28// foreachで2次元配列を参照渡しできない 29$ary1 = [1,2,3]; 30$ary2 = [4,5,6]; 31foreach ([$ary1, $ary2] as &$val) { 32 $val = [0]; 33} 34unset($val); 35foreach ($ary1 as $val) echo $val; 36// 123 37 38foreach ($ary2 as $val) echo $val; 39// 456 40unset($ary1, $ary2, $val);
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/10/15 16:52 編集
2016/10/15 16:56 編集
2016/10/15 17:12