有没有一种方法可以将一个PHP数组复制到另一个数组中?
在尝试复制PHP数组时,我已经遇到了几次问题。我想把一个定义在对象内部的数组复制到对象外部的全局变量中。
有没有一种方法可以将一个PHP数组复制到另一个数组中?
在尝试复制PHP数组时,我已经遇到了几次问题。我想把一个定义在对象内部的数组复制到对象外部的全局变量中。
由于这个问题没有被任何答案覆盖,并且现在在PHP 5.3中可用(假设原始帖子使用的是5.2),为了保持数组结构并更改其值,我更喜欢使用array_replace
或array_replace_recursive
,具体取决于我的用例。
http://php.net/manual/en/function.array-replace.php
下面是一个使用array_replace
和array_replace_recursive
的示例,演示如何保持索引顺序并能够删除引用。
下面的代码使用自PHP 5.4以来可用的短数组语法,将array()
替换为[]
。
http://php.net/manual/en/language.types.array.php
适用于偏移索引和名称索引数组
$o1 = new stdClass;
$a = 'd';
//This is the base array or the initial structure
$o1->ar1 = ['a', 'b', ['ca', 'cb']];
$o1->ar1[3] = & $a; //set 3rd offset to reference $a
//direct copy (not passed by reference)
$o1->ar2 = $o1->ar1; //alternatively array_replace($o1->ar1, []);
$o1->ar1[0] = 'z'; //set offset 0 of ar1 = z do not change ar2
$o1->ar1[3] = 'e'; //$a = e (changes value of 3rd offset to e in ar1 and ar2)
//copy and remove reference to 3rd offset of ar1 and change 2nd offset to a new array
$o1->ar3 = array_replace($o1->ar1, [2 => ['aa'], 3 => 'd']);
//maintain original array of the 2nd offset in ar1 and change the value at offset 0
//also remove reference of the 2nd offset
//note: offset 3 and 2 are transposed
$o1->ar4 = array_replace_recursive($o1->ar1, [3 => 'f', 2 => ['bb']]);
var_dump($o1);
输出:
["ar1"]=>
array(4) {
[0]=>
string(1) "z"
[1]=>
string(1) "b"
[2]=>
array(2) {
[0]=>
string(2) "ca"
[1]=>
string(2) "cb"
}
[3]=>
&string(1) "e"
}
["ar2"]=>
array(4) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
array(2) {
[0]=>
string(2) "ca"
[1]=>
string(2) "cb"
}
[3]=>
&string(1) "e"
}
["ar3"]=>
array(4) {
[0]=>
string(1) "z"
[1]=>
string(1) "b"
[2]=>
array(1) {
[0]=>
string(2) "aa"
}
[3]=>
string(1) "d"
}
["ar4"]=>
array(4) {
[0]=>
string(1) "z"
[1]=>
string(1) "b"
[2]=>
array(2) {
[0]=>
string(2) "bb"
[1]=>
string(2) "cb"
}
[3]=>
string(1) "f"
}
创建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/zh/arrayobject.getarraycopy.php
这是我在Php中复制数组的方法:
function equal_array($arr){
$ArrayObject = new ArrayObject($arr);
return $ArrayObject->getArrayCopy();
}
$test = array("aa","bb",3);
$test2 = equal_array($test);
print_r($test2);
This outputs:
Array
(
[0] => aa
[1] => bb
[2] => 3
)
$test2 = $test;
呢?ArrayObject
在这里解决了什么问题? - Nate<?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;
}
?>
$arr_one_copy = array_combine(array_keys($arr_one), $arr_one);
只是再提供一种解决方案 ;)
foreach($a as $key => $val) $b[$key] = $val ;
保留键和值。数组'a'是数组'b'的精确副本
private function cloneObject($mixed)
{
switch (true) {
case is_object($mixed):
return clone $mixed;
case is_array($mixed):
return array_map(array($this, __FUNCTION__), $mixed);
default:
return $mixed;
}
}
请定义此内容:
$copy = create_function('$a', 'return $a;');
将 $_ARRAY 复制到 $_ARRAY2:
$_ARRAY2 = array_map($copy, $_ARRAY);
$a = array(
'data' => 10
);
$b = $a;
var_dump($b);
output:
array:1 [
"data" => 10
]