How to combine 2 associative arrays in php such that we do not overwrite any duplicate entries in all cases?
我有两个内容相同的关联数组,所以我想把这两个数组组合起来,这样如果我在数组1中有
我试过使用数组合并,但如果第二个数组中有重复项,它会覆盖第一个数组中的项,我也试过使用
1 2 3 4 5 6 7 | $orders = new Order(); $prospectOffers = $orders->getOrder($orderConfNumber); $prospectOffersResult = json_decode($prospectOffers,true); $shoppingBasket = $cart->getCartItems(); var_dump($prospectOffersResult); // Both are arrays var_dump($shoppingBasket); //Both are arrays (array)$result = (array)$prospectOffersResult+(array)$shoppingBasket; |
谢谢。
如果两个变量都被理解为数组,则语句没有任何错误。您的致命错误可能是因为一个变量实际上是一个对象,并且使用var_dump可能会出错。通过添加类型转换,您强制PHP将两个变量都强制到数组中。如果一个变量是一个对象,它将具有以下效果:
来自php.net手册
"If an object is converted to an array,
the result is an array whose elements
are the object's properties. The keys
are the member variable names, with a
few notable exceptions: integer
properties are unaccessible; private
variables have the class name
prepended to the variable name;
protected variables have a '*'
prepended to the variable name. These
prepended values have null bytes on
either side."
号
现在有两个数组要添加,PHP没有什么好担心的。注意,当强制转换
在另一个问题上,数组中不能有两个相同的键。这将使索引数组变得不可能,因为要返回的正确值将变得不明确。如果你想在一个无损庄园中组合两个阵列,你必须使用一个更复杂的数据结构。
我的建议是使用数组,其中:
号
将成为:
顺序还没有确定。结构唯一显著的变化是,所有的第一个值都是数组,允许重复键的值被累积。此函数执行任务,可能使用更好的名称:
1 2 3 4 5 6 7 8 9 10 11 12 | // array(array) lossless_array_merge([$array1 [, $array2 [, $...]]]) function lossless_array_merge() { $arrays = func_get_args(); $data = array(); foreach ($arrays as $a) { foreach ($a as $k => $v) { $data[$k][] = $v; } } return $data; } |
。
只有当两个数组包含相同的字符串键时,
If the input arrays have the same
string keys, then the later value for
that key will overwrite the previous
one. If, however, the arrays contain
numeric keys, the later value will not
overwrite the original value, but will
be appended.
号
我相信这种行为是意料之中的。你会怎么处理这个案子?就这么说吧
数组合并后可接受的输出是什么?