有没有办法将更改放入/合并到集合上更深层的索引而不先将集合转换为数组?
我有一个带有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);
答案 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)