Laravel 5.2 推送到集合中更深层次的索引数组

Laravel 5.2 Push onto deeper indexed arrays within a Collection

有没有办法 put/merge 更改集合的更深索引而不先将集合转换为数组?

我有一个包含 4 个索引的 $collection,它们都包含 $arrays 所以为了推送到数组我必须这样做:

$collection = $collection->toArray(); // without this get array_push parameter 1 should be an array object given error
array_push($collection[$index], $array);

但是,我希望有更好的方法,这样我就不必在继续之前重新收集 (...) 原始 $collection,如下所示,我知道这是行不通的,但形成了一个没有上面那么尴尬的例子:

$collection->get($index)->merge($array);

因为 collections 实现了 ArrayAccess 接口,而不是:

$collection = $collection->toArray();
array_push($collection[$index], $array);

您可以使用:

array_push($collection[$index], $array);

编辑

好的,代码将无法运行,因为您收到无法分配重载属性的错误,但您在评论中还提到了其他错误。

假设您 collection 是这样的:

$collection = collect([[1,2],[11,12],[21,22],[31,32]]);

并且您想将 13 附加到 [11,12]

你可以这样做:

$collection->put(1, array_merge($collection[1], [13]));

我临时使用上面的 array_push 提出的解决方案没有将数组与现有数组合并,但这确实有效并且看起来更优雅一些。感谢 Marcin Nabialek 指出 Collections 实现了 ArrayAccess 接口,这并没有解决 array_push 的使用,但在下面的答案中被用来用更改覆盖现有数组。

$collection[$index] = collect($collection->get($key))->merge($array);

我愿意接受任何改进来推动我使用 Collections。

使用起来非常简单 put

$collection->put($index, $array);

就是这样

如果你想推送到集合的末尾,请使用push

$collection->push($array);