合并两个具有相同键的 eloquent collections

Merge two eloquent collections with identical keys

假设我有一个 collection 喜欢

{
    "object1": [
        {
            "name" xxx,
            "size" 999
        }
    ],
    "object2": [
        {
            "name": yyy,
            "size": 888,
        }
    ]
}

我还有一个collection喜欢

{
    "object2": [
        {
            "name" aaa,
            "size" 111
        }
    ],
    "object3": [
        {
            "name": bbb,
            "size": 222,
        }
    ]
}

我想要一个collection赞

{
    "object1": [
        {
            "name" xxx,
            "size" 999
        }
    ],
    "object2": [
        {
            "name": yyy,
            "size": 888,
        },
        {
            "name" aaa,
            "size" 111
        }
    ],
    "object3": [
        {
            "name": bbb,
            "size": 222,
        }
    ]
}

mergeRecursively 有效,但它将额外的结果封装在一个“项目”数组中,如下所示

{
    "object1": [
        {
            "name" xxx,
            "size" 999
        }
    ],
    "object2": {
        "items": [
            {
                "name": yyy,
                "size": 888,
            },
            {
                "name" aaa,
                "size" 111
            }
        ]
    ],
    "object3": [
        {
            "name": bbb,
            "size": 222,
        }
    ]
}

感谢任何帮助!谢谢!

您可以使用 Collection::each() method 遍历一个集合中的每一项并构建一个替换集合。

$results = new Collection;
$collection1->each(function($item, $key) use ($collection2, $results) {
    $push = $collection2->has($key) ? $item->mergeRecursive($collection2->get($key)) : $item;
    $results[$key] = $push;
});
dump($results);