$arr = array(1);
$a = & $arr[0];
$arr2 = $arr;
$arr2[0]++;
echo $arr[0],$arr2[0];
// Output 2,2
どうすれば可能ですか?PHPでの配列参照の混乱
$arr = array(1);
$a = & $arr[0];
$arr2 = $arr;
$arr2[0]++;
echo $arr[0],$arr2[0];
// Output 2,2
どうすれば可能ですか?PHPでの配列参照の混乱
ただし、内部の配列は潜在的に 危険です。右側の 参照を使用して通常の(参照ではなく)割り当てを行うと、左側が 参照になりませんが、配列内の参照はこれらの通常の 割り当てで保持されます。これは配列が で渡された関数呼び出しにも当てはまります。
/* Assignment of array variables */
$arr = array(1);
$a =& $arr[0]; //$a and $arr[0] are in the same reference set
$arr2 = $arr; //not an assignment-by-reference!
$arr2[0]++;
/* $a == 2, $arr == array(2) */
/* The contents of $arr are changed even though it's not a reference! */
これは決して知らなかった。 +1 – Sherlock
RTFM FTW! :-D +1 – DaveRandom
@DaveRandom RTFM FTWと略記してください。 )私はそれが間違った方法を取っていると思います;) –
それが$ ARRのように見えます[0]と$ ARR2あなたはポインタの1に増分した場合、int型はメモリ
リンクAre there pointers in php?にインクリメントされますので、[0]、同じ割り当てられたメモリを指しています
質問は同じ割り当てられたメモリを指している_whyです。 – Sherlock
私はそれを読んでいないが、$ arr2 = $ arr; $ arrをコピーするのではなく、Cのように新しいポインタを作成するように思われる – Dukeatcoding
$arr = array(1);//creates an Array ([0] => 1) and assigns it to $arr
$a = & $arr[0];//assigns by reference $arr[0] to $a and thus $a is a reference of $arr[0].
//Here $arr[0] is also replaced with the reference to the actual value i.e. 1
$arr2 = $arr;//assigns $arr to $arr2
$arr2[0]++;//increments the referenced value by one
echo $arr[0],$arr2[0];//As both $aar[0] and $arr2[0] are referencing the same block of memory so both echo 2
// Output 22
あなたは、私たちはそれがどのように動作するかを説明したいですか? – Wearybands
彼はarr2だけインクリメントし、arrもインクリメントする理由を知りたいとします。 – Dukeatcoding
これは、$ aを$ arrへの参照として設定しますが、$ aを使用しないので、この動作が特有であることを意味します。これは確かに奇妙です。 – Sherlock