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

时间:2012-10-11 20:44:19

标签: php arrays

说我有两个数组:

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

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

1 个答案:

答案 0 :(得分:2)

你可以试试这个:

$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

因此,当一个具有1M个元素的阵列使用大约200 MB,并且总峰值大约为400 MB时,PHP显然没有创建副本,否则峰值内存大约为600 MB($a,{ {1}}和$b)。