欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-28 16:29:53
一、当PHP数组变量$arr赋值给另一个变量$one时,此时是把数组变量$arr整个复制一份给$one,即使$arr是多维数组。 例: 疑惑半天,才发现是代码格式有空格的原因。可能因为是用此博客插件直接编写的吧。在sublime text3里面修改格式后运行正常。 ......

 

一、当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里面,执行会报错。

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

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