Laravel 5:如何将多个项目放入集合中的同一个键而不覆盖?

时间:2017-03-08 14:45:40

标签: php laravel laravel-5 collections

试图弄清楚如何解析集合并将多个项目放入另一个集合中的同一个键中。

目前我正在使用一个数组做这个,然后我从中创建一个集合,但里面的项目不是Collection类型,每个键都是一个数组,我不能使用像first()这样的方法在那些数组上。是的,我可以使用[0]代替,但我更愿意访问可用于集合的方法。

$some_array = [];

// Parsing the existing collection using foreach
foreach ($items_collection as $item) {
    // Doing some checks
    if ($item->some_attribute1 == 1
        && @$item->some_relation->some_attribute2
    ) {
        // Putting the item into the array with a specific dynamic key
        $some_array[$item->some_relation->some_attribute2][] = $item->some_relation;
    }
    else if ($item->some_attribute1 == 0
        && @$item->some_relation->some_attribute3) {
        // Putting the item into the array with a specific dynamic key
        $some_array[$item->some_relation->some_attribute3][] = $item->some_relation;
    }
}

// Defining a new Collection
$new_collection = new Collection();

// Parsing the array of groups of items and putting them in the newly created Collection by their key
foreach ($some_array as $key => $key_items) {
    $new_collection->put($key, $key_items);
}

如果要做这样的事情

$some_collection = new Collection();

foreach ($items_collection as $item) {
    if ($item->some_attribute1 == 1
        && @$item->some_relation->some_attribute2
    ) {
        $some_collection->put($item->some_relation->some_attribute2, $item->some_relation);
    }
    else if ($item->some_attribute1 == 0
        && @$item->some_relation->some_attribute3) {
        $some_collection->put($item->some_relation->some_attribute3, $item->some_relation);
    }
}
然后,不是将所有项目存储在同一个键中,而是新项目将覆盖旧项目。有没有办法使用put()将多个项目放在同一个键中?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

似乎问题是我没有将$key_items转换为最后一个foreach中的集合。 现在我只使用collect()上的$key_items方法将其设置为集合,现在一切正常。

foreach ($some_array as $key => $key_items) {
    $new_collection->put($key, collect($key_items));
}

我希望有人会发现这个解决方法很有用,直到找到更优雅的解决方案。