有没有一个函数可以将PHP数组的副本拷贝到另一个?
有没有一个函数可以将PHP数组的副本拷贝到另一个?
我已经烧了几次试图复制PHP数组。 我想将一个对象中定义的数组复制到它外面的一个全局对象中。
在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
,它是一个完全像数组一样行事的对象。 然而,作为一个对象,它具有引用语义。
编辑:@AndrewLarsson在下面的评论中提出了一个观点。 PHP有一个称为“引用”的特殊功能。 它们与C / C ++等语言中的指针有些相似,但并不完全相同。 如果数组包含引用,那么当数组本身通过复制传递时,引用仍然会解析为原始目标。 这当然通常是所期望的行为,但我认为这是值得一提的。
PHP会默认复制数组。 PHP中的参考必须是明确的。
$a = array(1,2);
$b = $a; // $b will be a different array
$c = &$a; // $c will be a reference to $a
如果您有一个包含对象的数组,则需要复制该数组而不触及其内部指针,并且需要克隆所有对象(以便在对复制进行更改时不修改原始数据数组),使用这个。
不接触数组内部指针的技巧是确保你正在处理数组的副本,而不是原数组(或对它的引用),所以使用函数参数将完成工作(因此,这是一个接受数组的函数)。
请注意,如果你想要克隆它们的属性,你仍然需要在你的对象上实现__clone()。
这个函数也适用于任何类型的数组(包括混合类型)。
function array_clone($array) {
return array_map(function($element) {
return ((is_array($element))
? call_user_func(__FUNCTION__, $element)
: ((is_object($element))
? clone $element
: $element
)
);
}, $array);
}
链接地址: http://www.djcxy.com/p/9843.html
上一篇: Is there a function to make a copy of a PHP array to another?