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

发布于 2024-08-20 00:15:06 字数 393 浏览 2 评论 0原文

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

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

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

感谢您的时间和回复。

What is the best way to add two associative arrays such that duplicate values are not over written : + or array_ merge ?

I was pretty sure that using + operator I can add two associative arrays such that duplicate values are not over written but this Answer is saying something different and so am not sure if it is really true.

I would really appreciate if you can share some lights on how can we add two associative arrays such that duplicate values are not over written.

Appreciate your time and responses.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

北城孤痞 2024-08-27 00:15:06

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

$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
// )

An array can't have more than one key-value pair with the same key. So if you have:

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

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

If you combine these arrays, you only get to keep one of the values of the combined array. The methods you describe do two different things:

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
// )

So you really need to define what you want to happen when you combine the arrays.

UPDATE

Based on @davidosomething's answer, here's what happens if you do 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
// )
幸福还没到 2024-08-27 00:15:06

你实际上想要 array_merge_recursive
如果 KEY 相同但值不同,这将创建一个数组的数组

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

You actually want array_merge_recursive
This creates an array of arrays if the KEY is the same but the value is different

Both array_merge and union will DISCARD one of the VALUES if a duplicate key is found

黎夕旧梦 2024-08-27 00:15:06

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

If you want to keep both values, you have to change the key for at least one of them. Perhaps you can write your own method to merge two arrays which prefixes all keys.

风情万种。 2024-08-27 00:15:06

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

array_merge will combine the arrays such that no values are lost, provided the arrays have contiguous numeric keys. If you start mixing string keys, values with the same keys will be overwritten. If you treat your arrays as arrays and not maps, array_merge will do what you want.

风和你 2024-08-27 00:15:06

一张图胜过1000个字

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

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

a picture is better than 1000 words

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

print_r($a + $b);              // foo=A
print_r(array_merge($a, $b));  // foo=B
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文