興味深い問題に遭遇したとき、私は配列と参照をいじっていました。たとえば、次のコードを使用します。
// Set everything up
$testArray = array(
'a' => array(),
'b' => array()
);
$saved = array();
$ref =& $testArray['b'];
// Set a value via the reference
$ref = array(1);
// Save the current array state
$saved[] = $testArray; // This shouldn't be a reference, right?
// Set another value via the reference
$ref = array(2);
// Save the current array state
$saved[] = $testArray; // This shouldn't be a reference, right?
複雑すぎることはありません。配列を作成し、配列内の「深い値」への参照を作成します。
ときvar_dump($saved)
、結果は私が期待したものではありません! 私は得る:
array(2) {
[0]=>
array(2) {
["a"]=>
array(0) {
}
["b"]=>
&array(1) {
[0]=>
int(2)
}
}
[1]=>
array(2) {
["a"]=>
array(0) {
}
["b"]=>
&array(1) {
[0]=>
int(2)
}
}
}
配列は参照ではなく値でコピーされたと思いました。が両方のスポットで[b]
等しいのはなぜですか? array(2)
配列をコピーしてその参照を解除するにはどうすればよいですか?
結果を次のようにしたい:
array(2) {
[0]=>
array(2) {
["a"]=>
array(0) {
}
["b"]=>
array(1) {
[0]=>
int(1)
}
}
[1]=>
array(2) {
["a"]=>
array(0) {
}
["b"]=>
array(1) {
[0]=>
int(2)
}
}
}
配列のコピーに$ref
まだリンクされているのはなぜですか? 私は基本的に配列の「状態」を保存し、コピーではなく元の参照のみを更新したいと考えています。$testArray