是否有一个函数可以将一个PHP数组复制到另一个数组?
我已经被烧毁了几次试图复制PHP数组。我想将对象内定义的数组复制到对象外部的全局数组。
是否有一个函数可以将一个PHP数组复制到另一个数组?
我已经被烧毁了几次试图复制PHP数组。我想将对象内定义的数组复制到对象外部的全局数组。
当前回答
在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++等语言中的指针,但又不完全相同。如果数组包含引用,则当数组本身通过副本传递时,引用仍将解析为原始目标。当然,这通常是理想的行为,但我认为这是值得一提的。
其他回答
<?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;
}
?>
PHP将默认复制数组。PHP中的引用必须显式。
$a = array(1,2);
$b = $a; // $b will be a different array
$c = &$a; // $c will be a reference to $a
$arr_one_copy = array_combine(array_keys($arr_one), $arr_one);
只是再发布一个解决方案;)
定义:
$copy = create_function('$a', 'return $a;');
复制$_ARRAY到$_ARRAY2:
$_ARRAY2 = array_map($copy, $_ARRAY);
array_merge()是一个函数,在PHP中可以将一个数组复制到另一个数组。