1

重複する値が上書きされないように2つの連想配列を追加する最良の方法は何ですか:+またはarray_ merge

+演算子を使用すると、重複する値が上書きされないように2つの連想配列を追加できると確信していましたが、この回答別のことを言っているので、それが本当に正しいかどうかはわかりません。

重複する値が上書きされないように、2つの連想配列を追加する方法についていくつかのライトを共有していただければ幸いです。

あなたの時間と反応に感謝します。

4

5 に答える 5

3

配列には、同じキーを持つ複数のキーと値のペアを含めることはできません。あなたが持っている場合:

$array1 = array(
  'foo' => 5,
  'bar' => 10,
  'baz' => 6
);

$array2 = array(
  'x' => 100,
  'y' => 200,
  'baz' => 30
);

これらの配列を結合すると、結合された配列の値の 1 つだけを保持できます。説明するメソッドは、次の 2 つの異なることを行います。

print_r(($array1 + $array2));

// Result:
// Array
// (
//     [foo] => 5
//     [bar] => 10
//     [baz] => 6
//     [x] => 100
//     [y] => 200
// )

print_r(array_merge($array1, $array2));

// Result:
// Array
// (
//     [foo] => 5
//     [bar] => 10
//     [baz] => 30
//     [x] => 100
//     [y] => 200
// )

したがって、配列を結合するときに何をしたいかを定義する必要があります。

アップデート

@davidosomethingの回答に基づいて、これを行うとどうなりますかarray_merge_recursive()

print_r(array_merge_recursive($array1, $array2));

// Result:
// Array
// (
//     [foo] => 5
//     [bar] => 10
//     [baz] => Array
//         (
//             [0] => 6
//             [1] => 30
//         )
// 
//     [x] => 100
//     [y] => 200
// )
于 2010-01-28T16:55:47.360 に答える
1

実際にはarray_merge_recursiveが必要ですキーが同じで値が異なる場合、これは配列の配列を作成します

重複するキーが見つかった場合、array_merge と union の両方が VALUES の 1 つを破棄します

于 2010-01-28T16:53:08.387 に答える
1

両方の値を保持したい場合は、少なくとも一方のキーを変更する必要があります。おそらく、すべてのキーをプレフィックスとする 2 つの配列をマージする独自のメソッドを作成できます。

于 2010-01-28T16:55:05.303 に答える
0

array_merge配列に連続した数値キーがある場合、値が失われないように配列を結合します。文字列キーの混在を開始すると、同じキーを持つ値が上書きされます。配列をマップではなく配列として扱う場合、array_merge は必要な処理を行います。

于 2010-01-28T16:51:03.127 に答える
0

写真は1000語よりも優れています

$a = array('foo' => 'A');
$b = array('foo' => 'B');

print_r($a + $b);              // foo=A
print_r(array_merge($a, $b));  // foo=B
于 2010-01-28T16:54:56.047 に答える