是否有将 PHP 数组复制到另一个数组的函数? 尝试复制 PHP 数组时,我已经被烧了几次。我想将对象内部定义的数组复制到它外部的全局数组。 原文由 vfclists 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 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 类的错综复杂的内容感到困惑,它是一个行为与数组完全相同的对象。然而,作为一个对象,它具有引用语义。 编辑:@AndrewLarsson 在下面的评论中提出了一个观点。 PHP 有一个称为“引用”的特殊功能。它们有点类似于 C/C++ 等语言中的指针,但又不完全相同。如果您的数组包含引用,那么当数组本身通过副本传递时,引用仍将解析为原始目标。这当然通常是理想的行为,但我认为值得一提。 原文由 troelskn 发布,翻译遵循 CC BY-SA 4.0 许可协议
PHP 默认会复制数组。 PHP 中的引用必须是显式的。 $a = array(1,2); $b = $a; // $b will be a different array $c = &$a; // $c will be a reference to $a 原文由 slikts 发布,翻译遵循 CC BY-SA 2.5 许可协议
在 PHP 中,除对象外的所有变量都通过称为写时复制的机制分配,而对象则通过引用分配。这意味着对于具有标量值的数组
$b = $a
已经会给你一个副本:将产生:
而对于对象,
产量:
在 另一个答案 中解释了数组元素也可能是需要克隆的对象的边缘情况
您可能会对诸如
ArrayObject
类的错综复杂的内容感到困惑,它是一个行为与数组完全相同的对象。然而,作为一个对象,它具有引用语义。编辑:@AndrewLarsson 在下面的评论中提出了一个观点。 PHP 有一个称为“引用”的特殊功能。它们有点类似于 C/C++ 等语言中的指针,但又不完全相同。如果您的数组包含引用,那么当数组本身通过副本传递时,引用仍将解析为原始目标。这当然通常是理想的行为,但我认为值得一提。