1

添加两个关联数组以使重复值不会被覆盖的最佳方法是什么:+array_ merge

我很确定使用+运算符我可以添加两个关联数组,这样重复的值就不会被覆盖,但是这个答案说的是不同的东西,所以不确定它是否真的是真的。

如果您能分享一些关于我们如何添加两个关联数组以便不会覆盖重复值的信息,我将不胜感激。

感谢您的时间和回应。

4

5 回答 5

3

一个数组不能有多个具有相同键的键值对。因此,如果您有:

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

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

如果组合这些数组,则只能保留组合数组的值之一。您描述的方法有两件不同的事情:

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 如果 KEY 相同但值不同,则会创建一个数组数组

如果发现重复键,array_merge 和 union 都将丢弃其中一个 VALUES

于 2010-01-28T16:53:08.387 回答
1

如果要保留这两个值,则必须更改其中至少一个的键。也许您可以编写自己的方法来合并两个以所有键为前缀的数组。

于 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 回答