46

array_merge() が、値は異なるが 2 つの配列の同じキー インデックスを持つ 2 つのキーを上書きするようにするにはどうすればよいですか?

たとえば、次のようにマージします。

[0] => 'whatever'

[0] => 'whatever', [1] => 'a', [2] => 'b'

生成する必要があります

[0] => 'whatever', [1] => 'a', [2] => 'b'

基本的に、配列に文字列キーがある場合と同じようにarray_mergeに動作させたい...

4

8 に答える 8

90

演算子を使用し+ます。

演算子array_mergeと比較:+

<?php

$a1 = array(0=>"whatever",);
$a2 = array(0=>"whatever",1=>"a",2=>"b");

print_r(array_merge($a1,$a2));
print_r($a1+$a2);
?>

出力:

Array
(
    [0] => whatever
    [1] => whatever
    [2] => a
    [3] => b
)
Array
(
    [0] => whatever
    [1] => a
    [2] => b
)

連想配列の数値キーの順序が正しくない場合でも+演算子は機能します。

<?php

$a1 = array(0=>"whatever",);
$a2 = array(1=>"a",0=>"whatever",2=>"b");

print_r(array_merge($a1,$a2));
print_r($a1+$a2);
?>

出力:

Array
(
    [0] => whatever
    [1] => a
    [2] => whatever
    [3] => b
)
Array
(
    [0] => whatever
    [1] => a
    [2] => b
)

この場合、新しいキーが作成されることに注意array_mergeしてください。望ましくない...

于 2011-05-08T19:17:16.783 に答える
7

手動で書くのはかなり簡単です:

function array_merge_custom($first, $second) {
    $result = array();
    foreach($first as $key => $value) {
        $result[$key] = $value;
    }
    foreach($second as $key => $value) {
        $result[$key] = $value;
    }

    return $result;
}

更新:return $first + $second;これはユニオン演算子 ( ) とは動作が異なります。この場合、両方に同じキーを持つ要素がある場合に2 番目の配列が優先されるためです。

ただし、引数の場所を入れ替えて、競合が発生した場合に「勝ちたい」配列を最初のオペランドとして配置すると、同じ動作が得られます。したがって、上記の関数は とまったく同じように動作しますreturn $second + $first;

于 2011-05-08T19:14:34.407 に答える
3

私のプロジェクトでは、自分の関数を使用しています

function array_merge_custom(){
    $array = [];
    $arguments  = func_num_args();
    foreach($arguments as $args)
        foreach($args as $key => $value)
            $array[$key] = $value;
    return $array;
}

使用法

$a = array_merge_custom($b, $c, $d, ... .. )
于 2012-01-08T21:42:28.193 に答える
2

$a2+$a1同じ結果を得るために使用する必要がありますarray_merge($a1,$a2);

$a1 = array(
    'k1' => 1,
    'k2' => 2,
    'k3' => 3,
);

$a2 = array(
    'k1' => 11,
    'k2' => 22,
    'k4' => 44,
);

コード:

print_r(array_merge($a1,$a2));

出力:

Array ( 
    [k1] => 11 
    [k2] => 22 
    [k3] => 3 
    [k4] => 44 
)

コード:

print_r($a1+$a2);

出力:

Array ( 
    [k1] => 1 
    [k2] => 2 
    [k3] => 3 
    [k4] => 44 
)

コード:

print_r($a2+$a1);

出力:

Array ( 
    [k1] => 11 
    [k2] => 22 
    [k4] => 44 
    [k3] => 3 
) 
于 2014-01-21T14:54:00.750 に答える
0

を使用array_merge()してから使用できますarray_unique()

于 2011-05-08T19:16:40.277 に答える