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);
有没有办法 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);