有没有一个函数可以将PHP数组复制到另一个数组?

2022-08-30 05:48:50

有没有一个函数可以将PHP数组复制到另一个数组?

我被烧毁了几次试图复制PHP数组。我想将对象内部定义的数组复制到对象外部的全局。


答案 1

在 PHP 中,除对象之外的所有变量都由称为写入时复制的机制分配,而对象则通过引用进行分配。这意味着对于具有标量值的数组,只需简单地将给你一个副本:$b = $a

$a = array();
$b = $a;
$b['foo'] = 42;
var_dump($a);

将产生:

array(0) {
}

而对于对象,

$a = new StdClass();
$b = $a;
$b->foo = 42;
var_dump($a);

收益 率:

object(stdClass)#1 (1) {
  ["foo"]=>
  int(42)
}

数组元素也可能是需要克隆的对象的边缘情况在另一个答案中进行了解释

您可能会对诸如ArrayObject之类的复杂性感到困惑,ArrayObject是一个行为与数组完全相同的对象。然而,作为一个对象,它具有参考语义。

编辑:@AndrewLarsson在下面的评论中提出了一个观点。PHP有一个叫做“引用”的特殊功能。它们有点类似于C / C++等语言中的指针,但不完全相同。如果数组包含引用,则当数组本身通过 copy 传递时,引用仍将解析为原始目标。这当然是人们通常想要的行为,但我认为值得一提。


答案 2

默认情况下,PHP 将复制数组。PHP 中的引用必须是显式的。

$a = array(1,2);
$b = $a; // $b will be a different array
$c = &$a; // $c will be a reference to $a