What would be the best way to add two associative arrays such that duplicate values are not over written : `+` or `array_merge`?
本问题已经有最佳答案,请猛点这里访问。
添加两个关联数组以避免重复值被重写的最佳方法是什么:
我很确定,使用
如果您能分享一些关于如何添加两个关联数组的信息,这样重复的值就不会写得太多,我将非常感谢。
感谢你的时间和回应。
一个数组不能有多个具有相同键的键值对。如果你有:
1 2 3 4 5 6 7 8 9 10 11 |
如果组合这些数组,则只能保留组合数组的一个值。您描述的方法有两种不同的功能:
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的回答,如果您执行
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 |
如果数组有连续的数字键,