2

假设我有两个数组:

$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;
    }
    

如何在保留键的同时合并两个关联数组?

4

1 回答 1

3

你可以试试这个:

$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

于 2012-10-11T20:50:58.970 回答