0

有没有一种方法可以在不先将集合转换为数组的情况下,对集合上更深的索引进行更改/合并?

我有一个带有 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);
4

3 回答 3

1

作为集合实现ArrayAccess接口,而不是:

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

您可以使用:

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

编辑

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

假设您有这样的集合:

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

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

你可以这样做:

$collection->put(1, array_merge($collection[1], [13]));
于 2016-08-24T22:15:33.873 回答
0

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

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

我愿意接受任何改进以推动我对 Collections 的使用。

于 2016-08-25T00:11:27.207 回答
0

使用put非常简单

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

就是这样

如果你想推到收集结束使用

$collection->push($array);

于 2016-08-25T06:41:32.307 回答