假设我有一个节点(对象)数组。我需要创建一个我可以修改的数组副本,而不会影响源数组。但是更改节点会影响源节点。基本上保持指向对象的指针而不是复制它们的值。
// node(x, y)
$array[0] = new node(15, 10);
$array[1] = new node(30, -10);
$array[2] = new node(-2, 49);
// Some sort of copy system
$array2 = $array;
// Just to show modification to the array doesn't affect the source array
array_pop($array2);
if (count($array) == count($array2))
echo "Fail";
// Changing the node value should affect the source array
$array2[0]->x = 30;
if ($array2[0]->x == $array[0]->x)
echo "Goal";
最好的方法是什么?
答案 0 :(得分:2)
如果您使用PHP 5:
你运行过你的代码吗? 它已经在运行,无需更改任何内容。我明白了:
Goal
我跑的时候。
这很可能是因为$array
的值已经是引用。
另请阅读this question。虽然他想要实现相反的目标,但理解数组复制如何在PHP中工作可能会有所帮助。
<强>更新强>
这种行为,在使用对象复制数组时,将复制对象的引用,而不是对象本身was reported as a bug。但是还没有关于此的新信息。
如果您使用PHP 4:
(为什么还要使用它?)
您必须执行以下操作:
$array2 = array();
for($i = 0; $i<count($array); $i++) {
$array2[$i] = &$array[$i];
}
答案 1 :(得分:0)
现在是时候我不会编写PHP代码,而是编写代码
// Some sort of copy system
$array2 = $array;
实际上有效吗?
您是否必须以新的方式复制数组的每个元素?