PHP取消引用

3
假设我有这段代码: $val = 1; $arr = Array(); $arr['val'] =& $val; $val = 2; echo $arr['val'];
这将打印出2,因为$val被引用传递给了$arr。
我的问题是:如果我通过引用将一个值传递给数组,是否有办法稍后删除该引用,使它成为一个简单的复制值? 更明确地说,我想要这样的东西: $val = 1; $arr = Array(); $arr['val'] =& $val; $arr['val'] = clone $arr['val']; // 或者更好的方法: $arr = clone $arr; $val = 2; echo $arr['val'];
这应该打印出1(因为在引用变量改变之前,数组已经被克隆了)。 然而,clone不适用于数组,它只适用于对象。
有什么想法吗?我真的不知道该怎么做。我尝试编写一个递归复制函数,但那没用。
1个回答

4

您可以通过取消索引然后重新分配值,而不是通过引用重新分配。

unset($arr['val']);
$arr['val'] = $val;

如果我没有原始的 $val 呢?比如说我现在在另一个函数中,只能访问到 $arr,而我想要删除所有内部引用,该怎么办呢? - Kipras
@Kipras 然后存储该值,取消数组索引并重新赋值。 - user229044

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接