最近,我试图创建一个PHP数组的副本,只是我希望该副本包含对值的引用,而不是包含值的数组的副本。
我这样做的主要动机是将call_user_func_array
函数与mysqli_stmt_bind_param
和mysqli_stmt_bind_result
函数结合使用以创建用于处理准备好的语句的包装函数。
在尝试找出方法时,我遇到了以下代码:
$arr = array(1, 2, 3, 4); // The array to make a copy of with references
$ref_arr = array(); // The new array that will contain the references
foreach ($arr as $key => &$val) {
$ref_arr[$key] = &$val;
}
上面的代码实际上通过创建与第一个数组相同的第二个数组提供了我想要的东西,除了该数组中的元素是对值的引用而不是值本身,但是,我不明白它是如何工作的。
我了解&符号(&
)在PHP中的作用,但我不理解为什么$val
在foreach循环中两个实例都必须引用为&$val
。
如果有人可以解释上面的foreach循环中到底发生了什么,我将非常感激。
非常感谢。
第一个实例必须作为参考。否则,您只会得到本地副本。考虑以下代码:
$arr = array(1, 2, 3, 4);
foreach ($arr as $val)
$val = 5;
print_r($arr);
该代码仍将打印1,2,3,4,因为您没有更改数组中的值,而是更改了副本。
相同的逻辑适用于第二个实例。如果不使用&,则只会分配元素的当前值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句