当我遇到一个有趣的问题时,我正在处理数组和引用。以这段代码为例:
// 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
我想基本上保存数组的“状态”,并且参考只更新原始而不是副本。