2

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');

基本的な要件が1つあります。配列(、 )への参照を取得する関数が行うように、ソリューション自体を変更する必要があります。$arrarray_push()array_splice()

  • $arr = array_merge($arr, $arr2)コピーが作成されるので使いたくありません。
  • $ arr2を繰り返したくない:

    // this is not an option
    foreach ($arr2 as $k => $v)
    {
        $arr[$k] = $v;
    }
    

キーを保持しながら2つの連想配列をマージするにはどうすればよいですか?

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

したがって、1M要素の1つのアレイは約200MBを使用し、全体のピークは約400 MBですが、PHPは明らかにコピーを作成しませんでした。そうでない場合、ピークメモリは約600 MB(、、$aおよび$b)になり$a + $bます。

于 2012-10-11T20:50:58.970 に答える