Laravel 5.2推入集合中更深的索引数组

时间:2016-08-24 22:01:46

标签: laravel laravel-5 laravel-5.2 laravel-collection

有没有办法将更改放入/合并到集合上更深层的索引而不先将集合转换为数组?

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

3 个答案:

答案 0 :(得分: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]));

答案 1 :(得分:0)

我暂时使用array_push放入的解决方案并没有将数组与现有数组合并,但这确实有效,看起来更优雅。感谢Marcin Nabialek,他指出Collections实现了ArrayAccess接口,该接口没有解决array_push的使用问题,但在下面的答案中用于覆盖带有更改的存在数组。

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

我愿意接受任何改进以推动我使用收藏品。

答案 2 :(得分:0)

使用put

非常容易

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

就是这样

如果您想使用push

推送到收藏结束

$collection->push($array);