PHP数组的深拷贝和引用赋值
程序员文章站
2022-03-21 21:07:32
一、当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里面,执行会报错。
疑惑半天,才发现是代码格式有空格的原因。可能因为是用此博客插件直接编写的吧。在sublime text3里面修改格式后运行正常。
下一篇: for循环案例