假设我有两个数组:
$arr = array('k1' => 'v1',
'k2' => 'v2');
$arr2 = array('k3' => 'v3',
'k4' => 'v4');
我想将 $arr2
合并到 $arr
中,这样我最终会得到:
$arr = array('k1' => 'v1',
'k2' => 'v2',
'k3' => 'v3',
'k4' => 'v4');
有一个基本要求:解决方案必须更改 $arr
本身,例如引用数组的函数 (array_push()
) >, array_splice()
) 就可以了。
- 我不想使用
$arr = array_merge($arr, $arr2)
因为它会创建一个副本。 我不想遍历 $arr2 :
// this is not an option foreach ($arr2 as $k => $v) { $arr[$k] = $v; }
如何合并两个关联数组,同时保留它们的键?
最佳答案
你可以试试这个:
$arr += $arr2;
我测试了内存使用情况:
for ($i=0; $i<1000000; $i++) $a[]=1;
echo memory_get_peak_usage(), "\n";
for ($i=0; $i<1000000; $i++) $b[]=1;
echo memory_get_peak_usage(), "\n";
$a += $b;
echo memory_get_peak_usage(), "\n";
输出:
209135144
417540744
417540872
因此,虽然一个包含 1 M 元素的数组使用大约 200 MB,总体峰值约为 400 MB,但 PHP 显然没有创建副本,否则峰值内存将约为 600 MB ($a
、$b
和$a + $b
)。
关于php - 如何合并两个关联数组,同时保留它们的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12848215/