php复制独立数组,是否有一个函数将PHP数组的副本复制到另一个?

是否有一个函数将PHP数组的副本复制到另一个?

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

#1楼

array_merge()是一个可以在PHP中将一个数组复制到另一个数组的函数。

#2楼

当你这样做

$array_x = $array_y;

PHP复制数组,所以我不确定你将如何被烧毁。 对于你的情况,

global $foo;

$foo = $obj->bar;

应该工作正常。

为了被烧毁,我认为你要么必须使用引用,要么希望克隆数组中的对象。

#3楼

PHP将默认复制该数组。 PHP中的引用必须是明确的。

$a = array(1,2);

$b = $a; // $b will be a different array

$c = &$a; // $c will be a reference to $a

#4楼

在PHP中,数组是通过复制分配的,而对象是通过引用分配的。 这意味着:

$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到困惑, ArrayObject是一个与数组完全相同的对象。 然而,作为一个对象,它具有引用语义。

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

#5楼

如果您有一个包含对象的数组,则需要复制该数组而不触及其内部指针,并且需要克隆所有对象(这样当您对复制的对象进行更改时,您不会修改原始数据数组),使用这个。

不接触数组内部指针的技巧是确保你正在处理数组的副本,而不是原始数组(或对它的引用),所以使用函数参数将完成工作(因此,这是一个接收数组的函数。

请注意,如果您还希望克隆其属性,则仍需要在对象上实现__clone() 。

此函数适用于任何类型的数组(包括混合类型)。

function array_clone($array) {

return array_map(function($element) {

return ((is_array($element))

? array_clone($element)

: ((is_object($element))

? clone $element

: $element

)

);

}, $array);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值