我听说PHP可以选择如何分配数组,取决于数组大小。 它可以通过复制值(作为任何标量类型)或通过引用进行分配。
PHP总是通过复制值将数组赋值给变量,如手册中所述。
或者它可以通过引用分配。 ?
<?php $a = array(1,2,3); ?>
答案 0 :(得分:20)
将数组变量分配给其他变量时,可以通过引用分配数组:
// By value...
$a = array(1,2,3);
$b = $a;
array_push($a, 5);
print_r($b);
// $b is not a reference to $a
Array
(
[0] => 1
[1] => 2
[2] => 3
)
// By Reference
$a = array(1,2,3);
$b = &$a; // Here we assign by reference
array_push($a, 5);
print_r($b);
// $b is a reference to $a and gets the new value (3 => 5)
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 5
)
答案 1 :(得分:13)
除非您引用已存在的内容,否则无法通过引用分配内容。同样,你不能复制不存在的东西。
所以这段代码:
$a = array(1,2,3);
...既不复制也不引用 - 它只是创建一个新的数组,用值填充它,因为这些值是按字面指定的。
但是,这段代码:
$x = 1;
$y = 2;
$z = 3;
$a = array($x,$y,$z);
...将$x
,$y
和$z
的值复制到数组 1 中。用于初始化数组值的变量仍然存在,并且可以在不影响数组中的值的情况下进行修改或销毁。
此代码:
$x = 1;
$y = 2;
$z = 3;
$a = array(&$x,&$y,&$z);
...创建一系列对$x
,$y
和$z
的引用(注意&
)。如果在运行此代码后,我修改$x
- 假设我给它一个值为4 - 它也会修改数组中的第一个值。因此,当您使用数组时,$a[0]
现在将包含4
。
有关PHP参考工作方式的更多信息,请参阅手册的this section。
1 根据用作数组成员的变量的类型和值,即使按赋值分配,也可能在赋值时不会发生复制操作。在内部PHP由于性能和内存效率的原因,在尽可能多的情况下使用copy-on-write。但是,就代码上下文中的行为而言,您可以将其视为简单副本。
答案 2 :(得分:1)
是的,请使用&
$a = array(&$b, &$c, &$d);