我有一个对象数组。我知道对象是按"reference“赋值的,数组是按"value”赋值的。但是当我赋值数组时,数组中的每个元素都引用了对象,所以当我修改其中一个数组中的对象时,更改会反映到另一个数组中。
有没有一种简单的方法来克隆一个数组,或者我必须遍历它来克隆每个对象?
发布于 2012-07-17 21:39:38
$array = array_merge(array(), $myArray);
发布于 2011-06-21 08:11:57
您需要克隆对象以避免引用相同的对象。
function array_copy($arr) {
$newArray = array();
foreach($arr as $key => $value) {
if(is_array($value)) $newArray[$key] = array_copy($value);
else if(is_object($value)) $newArray[$key] = clone $value;
else $newArray[$key] = $value;
}
return $newArray;
}
发布于 2013-10-31 16:52:44
正如AndreKR所建议的,如果您已经知道数组包含对象,那么使用array_map()是最好的方法:
$clone = array_map(function ($object) { return clone $object; }, $array);
https://stackoverflow.com/questions/6418903
复制相似问题