我想要一个数组的引用,然后取消设置对数组的一些元素的引用。对于这个问题,我简化了代码:
echo"1:";
print_r($this->data);
$return =& $this->data;
foreach(range(1,10) AS $key)
{
unset($return[$key]);
}
echo"2:";
print_r($this->data);
$ this-> data是一个数组。此代码应保持$ this->数据不变,但它不会。输出是:
1:Array
(
[0] => Array
(
[id] => 1
)
[1] => Array
(
[id] => 2
)
[2] => Array
(
[id] => 3
)
[3] => Array
(
[id] => 4
)
[4] => Array
(
[id] => 5
)
[5] => Array
(
[id] => 6
)
[6] => Array
(
[id] => 7
)
[7] => Array
(
[id] => 8
)
[8] => Array
(
[id] => 9
)
[9] => Array
(
[id] => 10
)
)
2:Array
(
[0] => Array
(
[id] => 1
)
)
为什么通过取消设置引用,$ this->数据中的数组会被更改? stackoverflow关于删除引用的所有其他问题都使用unset()函数,那为什么会出现问题?
感谢。
答案 0 :(得分:1)
通过使用$return =& $this->data
创建引用,您基本上为数组$this->data
提供了一个新名称。这是什么参考。现在,使用新名称或旧名称访问数组没有任何区别。
答案 1 :(得分:0)
不同之处在于您实际上并未取消参考。您正在取消引用数据中的值。请参阅此沙箱:PHP Unset Test
$a=1;
$b = & $a;
unset($a);
echo 'B'."\n";
echo $b;
echo "\n\n";
$c=array(0,1,2,3);
$d = & $c;
unset($c);
echo 'D'."\n";
var_export($d);
echo "\n\n";
$e=array(0,1,2,3);
$f = & $e;
unset($f[2]);
echo 'E'."\n";
var_export($e);
输出:
B
1
D
array (
0 => 0,
1 => 1,
2 => 2,
3 => 3,
)
E
array (
0 => 0,
1 => 1,
3 => 3,
)