PHP数组的深拷贝和引用赋值

Posted bluepegasus

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP数组的深拷贝和引用赋值相关的知识,希望对你有一定的参考价值。

 

一、当php数组变量$arr赋值给另一个变量$one时,此时是把数组变量$arr整个复制一份给$one,即使$arr是多维数组。

例:

$arr = array(1, 2, 3, array(‘one‘, ‘two‘));
$one = $arr;
# 输出原数组$arr print_r($arr);  # Array ( [0] => 1 [1] => 2 [2] => 3 [3] => Array ( [0] => one [1] => two ) )

# 输出新数组$one
print_r($one);  # Array ( [0] => 1 [1] => 2 [2] => 3 [3] => Array ( [0] => one [1] => two ) )

# 修改原数组$arr,并输出 $arr[0] = 4; $arr[3][1] = ‘three‘; print_r($arr);  # Array ( [0] => 4 [1] => 2 [2] => 3 [3] => Array ( [0] => one [1] => three ) )

# 输出新数组$one print_r($one);  # Array ( [0] => 1 [1] => 2 [2] => 3 [3] => Array ( [0] => one [1] => two ) )
从例子可以看出,修改原数组的值并没有影响新数组

二、当PHP数组变量$arr使用引用赋值给另一个变量$one时,此时数组变量$arr 并没有 整个复制一份给$one,而是把数组的引用赋给$one,即两个变量指向同一个数组
例:
$arr = array(1, 2, 3, array(‘one‘, ‘two‘));
$one = &$arr;

# 输出原数组$arr
print_r($arr);  # Array ( [0] => 1 [1] => 2 [2] => 3 [3] => Array ( [0] => one [1] => two ) ) 

# 输出新数组$one
print_r($one);  # Array ( [0] => 1 [1] => 2 [2] => 3 [3] => Array ( [0] => one [1] => two ) ) 


# 修改原数组$arr,并输出
$arr[0] = 4;  
$arr[3][1] = ‘three‘;
print_r($arr);  # Array ( [0] => 4 [1] => 2 [2] => 3 [3] => Array ( [0] => one [1] => three ) ) 


# 输出新数组$one
print_r($one);  # Array ( [0] => 4 [1] => 2 [2] => 3 [3] => Array ( [0] => one [1] => three ) ) 
从例子可以看出,修改了原数组的值,同时新数组值也改变了。

上面的代码,是在写博客时直接写进来的,如果直接复制粘贴到sublime text3里面,执行会报错。

技术分享图片

疑惑半天,才发现是代码格式有空格的原因。可能因为是用此博客插件直接编写的吧。在sublime text3里面修改格式后运行正常。



















以上是关于PHP数组的深拷贝和引用赋值的主要内容,如果未能解决你的问题,请参考以下文章

Python中的深拷贝与浅拷贝

Vue实现对数组对象的深拷贝复制

Vue实现对数组对象的深拷贝复制

JavaScript深拷贝和浅拷贝数组

Python中的深拷贝和浅拷贝

python中的深拷贝和浅拷贝理解