关于php:添加两个关联数组的最佳方法是什么,这样重复的值就不会被重写:”+”或”array_merge”?

What would be the best way to add two associative arrays such that duplicate values are not over written : `+` or `array_merge`?

本问题已经有最佳答案,请猛点这里访问。

添加两个关联数组以避免重复值被重写的最佳方法是什么:+array_ merge

我很确定,使用+操作符,我可以添加两个关联数组,这样重复的值就不会写得太多,但这个答案说的是不同的东西,所以我不确定它是否真的是真的。

如果您能分享一些关于如何添加两个关联数组的信息,这样重复的值就不会写得太多,我将非常感谢。

感谢你的时间和回应。


一个数组不能有多个具有相同键的键值对。如果你有:

1
2
3
4
5
6
7
8
9
10
11
$array1 = array(
  'foo' => 5,
  'bar' => 10,
  'baz' => 6
);

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

如果组合这些数组,则只能保留组合数组的一个值。您描述的方法有两种不同的功能:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
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
// )

因此,您真的需要定义在组合数组时要发生什么。

更新

根据@davidosometing的回答,如果您执行array_merge_recursive(),会发生以下情况:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
print_r(array_merge_recursive($array1, $array2));

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


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


你实际上想要数组合并递归如果键相同但值不同,则创建数组数组数组

如果找到重复的键,数组合并和联合都将放弃其中一个值


一张图片胜过1000字。

1
2
3
4
5
$a = array('foo' => 'A');
$b = array('foo' => 'B');

print_r($a + $b);              // foo=A
print_r(array_merge($a, $b));  // foo=B


如果数组有连续的数字键,array_merge将组合数组,这样就不会丢失任何值。如果开始混合字符串键,具有相同键的值将被覆盖。如果将数组视为数组而不是映射,则数组合并将执行所需操作。