合并两个 Laravel 集合并保留原始键值

13

我有以下两个集合:

Collection {#402 ▼
  #items: array:1 [▼
    4007 => "4007 - Container Deposit - 18.00 Drum - In Stock: 0.00"
  ]
}

Collection {#398 ▼
  #items: array:3 [▼
    1000 => "1000 - Acetone - 162.00 KG - In Stock: 10000.00"
    1001 => "1001 - Acetone - 15.80 KG - In Stock: 0.00"
    24662 => "24662 - 1L Untd Antifreeze Orange FO2272A60(Prem - 1.00 Litre - In Stock: 0.00"
  ]
}

使用 Laravel 的集合合并函数:

$merged = $ref_prod_containers->merge($ref_cust_prod);
dd($merged);
我得到了以下内容:

(我)获得以下:

Collection {#397 ▼
  #items: array:4 [▼
    0 => "4007 - Container Deposit - 18.00 Drum - In Stock: 0.00"
    1 => "1000 - Acetone - 162.00 KG - In Stock: 10000.00"
    2 => "1001 - Acetone - 15.80 KG - In Stock: 0.00"
    3 => "24662 - 1L Untd Antifreeze Orange FO2272A60(Prem - 1.00 Litre - In Stock: 0.00"
  ]
}

然而我希望保留原始键。合并函数正在删除它们并替换为0、1、2、3。

谢谢,朱利安

2个回答

35
您可以使用 Laravel 集合的 `union()` 方法。请注意,当处理重复键时,它与 `merge()` 的行为不同:如果在 ` $array1` 和 `$array2` 中都存在相同的键,并且您执行了 `$merged = $array1->union($array2)`,则 `$merged` 集合中将会包含 `$array1` 的值,并且 `$array2` 的值将会被舍弃(Laravel union documentation)。

谢谢,那就解决了。我的键是主键,所以我不需要担心重复的键。 - user2197774
4
这也反映了PHP中数组并集运算符(+)的行为。 - BARNZ
在Laravel集合中,是否有一种方法可以定义回调函数,并决定在出现重复键的情况下该如何处理? - JCarlosR

0

我会尝试使用字符串键来合并和合并集合。从Laravel文档的集合部分,函数merge()

If the given array's keys are numeric, the values will be appended to the end of the collection:

我刚刚尝试了这个想法,也认为它会起作用,但实际上并没有:collect(['100' => 'aa', '200' => 'bb'])->merge(['100' => 'AA', '200' => 'BB']) 的结果是 ['aa', 'bb', 'AA', 'BB'] - cjauvin
如果您尝试 collect(['a100' => 'aa', 'b200' => 'bb'])->merge(['a100' => 'AA', 'b200' => 'BB']),将得到 [ "a100" => "AA", "b200" => "BB"]。这个方法通过在键名前加上一个字符并强制转换为字符串来实现。 - dparoli
当然,但后来我发现 union 更适合我的需求。 - cjauvin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接