我有两个关联数组,它们有很多相同的内容,所以我想以这样的方式组合这两个数组,如果我在数组 1 和 a
中有 a
在数组 2 中比在数组 3 中我应该有 a 的
而不是 1 的条目。
我试过使用 array_merge 但如果第二个数组中有任何重复项,它会覆盖第一个数组中的条目,我也尝试过使用 +
但它给我 fatal error 说 Fatal error :/home/code.php 中不支持的操作数类型
然后我尝试做
(array)$ar3 = (array)$ar1 +(array)$ar2
它似乎加起来了。我想知道这是否是正确的方法,以及为什么一开始我会遇到 fatal error ,但它却能正常工作,因为我已经将 $ar3、$ar2、$ar1 定义为数组类型。
$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;
谢谢。
最佳答案
$array1 + $array2
将返回两个数组的并集。如果它们是关联的,则如果键发生冲突,则首选左侧操作数的值。因此,这不是您想要的解决方案,因为值会丢失。
如果两个变量都被理解为数组,则该语句没有任何问题。您可能会发生 fatal error ,因为一个变量实际上是一个对象,并且可能会误认为使用 var_dump。通过添加类型转换,您强制 PHP 将两个变量强制转换为数组。如果一个变量是一个对象,它会产生这样的效果:
"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 没有什么可担心的。请注意,虽然强制转换 +
的两个操作数很重要,但强制转换您要分配给的变量是没有意义的。表达式 (array)$foo
不会修改 $foo,而是返回一个新值。这对于要求您声明变量的语言来说可能不直观,但 PHP 不是这种语言。
关于你的另一个问题,你不能在一个数组中有两个相同的键。这将使索引数组变得不可能,因为要返回的正确值会变得不明确。如果您希望在无损庄园中组合两个数组,您将不得不使用更复杂的数据结构。
我的建议是使用数组的数组,其中:
$a1 = array('a' => 1, 'b' => 2, 'c' => 3);
$a2 = array('a' => 3, 'b' => 2, 'd' => 2);
将成为:
$a3 = array(
'a' => array(1, 3),
'b' => array(2, 2),
'c' => array(3),
'd' => array(2)
);
并且顺序未确定。该结构唯一值得注意的变化是所有第一个值都是数组,允许累积重复键的值。这个函数完成任务并且可能用一个更好的名字来完成:
// 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;
}
关于php - 如何在 php 中组合 2 个关联数组,这样我们就不会在所有情况下覆盖任何重复的条目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2148694/