是否有一个函数可以将一个PHP数组复制到另一个数组?
我已经被烧毁了几次试图复制PHP数组。我想将对象内定义的数组复制到对象外部的全局数组。
是否有一个函数可以将一个PHP数组复制到另一个数组?
我已经被烧毁了几次试图复制PHP数组。我想将对象内定义的数组复制到对象外部的全局数组。
当前回答
创建ArrayObject的副本
<?php
// Array of available fruits
$fruits = array("lemons" => 1, "oranges" => 4, "bananas" => 5, "apples" => 10);
$fruitsArrayObject = new ArrayObject($fruits);
$fruitsArrayObject['pears'] = 4;
// create a copy of the array
$copy = $fruitsArrayObject->getArrayCopy();
print_r($copy);
?>
从https://www.php.net/manual/en/arrayobject.getarraycopy.php
其他回答
<?php
function arrayCopy( array $array ) {
$result = array();
foreach( $array as $key => $val ) {
if( is_array( $val ) ) {
$result[$key] = arrayCopy( $val );
} elseif ( is_object( $val ) ) {
$result[$key] = clone $val;
} else {
$result[$key] = $val;
}
}
return $result;
}
?>
当你这样做时
$array_x = $array_y;
PHP复制了数组,所以我不确定你是如何被烧毁的。为了你的案子,
global $foo;
$foo = $obj->bar;
应该没问题。
我认为,要想被复制,要么必须使用引用,要么需要克隆数组中的对象。
在php数组中,你只需要将它们赋值给其他变量来获得数组的副本。但首先你需要确定它的类型,是array还是arrayObject还是stdObject。
对于简单php数组:
$a = array(
'data' => 10
);
$b = $a;
var_dump($b);
output:
array:1 [
"data" => 10
]
简单,使深度复制打破所有链接
$new=unserialize(serialize($old));
如果您有一个包含对象的数组,您需要在不触及其内部指针的情况下复制该数组,并且需要克隆所有对象(这样当您对复制的数组进行更改时不会修改原始对象),请使用此方法。
不接触数组内部指针的技巧是确保您使用的是数组的副本,而不是原始数组(或原始数组的引用),因此使用函数形参将完成工作(因此,这是一个接受数组的函数)。
注意,如果你希望对象的属性也被克隆,你仍然需要在对象上实现__clone()。
此函数适用于任何类型的数组(包括混合类型)。
function array_clone($array) {
return array_map(function($element) {
return ((is_array($element))
? array_clone($element)
: ((is_object($element))
? clone $element
: $element
)
);
}, $array);
}